如何修改Python Pandas代码实现特定NaN填充逻辑?
Pandas代码优化方案
实现逻辑顺序
先处理Jan列的NaN值填充,再执行原有同行向右填充逻辑,确保Jan列的特殊填充规则优先生效:
- 若某行Jan列值为NaN,用上一行Jun列的非NaN值填充
- 保留同行内非NaN值向右填充NaN单元格的功能
完整代码示例
import pandas as pd import numpy as np # 示例输入数据 data = { 'Jan': [1, np.nan, 3, np.nan], 'Feb': [np.nan, 2, np.nan, np.nan], 'Jun': [5, 6, 7, 8] } df = pd.DataFrame(data) # 步骤1:用前一行Jun列的值填充当前行Jan列的NaN df['Jan'] = df['Jan'].fillna(df['Jun'].shift(1)) # 步骤2:执行原有同行向右填充NaN的逻辑 df = df.bfill(axis=1) print(df)
输入输出示例
输入数据
| Jan | Feb | Jun |
|---|---|---|
| 1 | NaN | 5 |
| NaN | 2 | 6 |
| 3 | NaN | 7 |
| NaN | NaN | 8 |
输出结果
| Jan | Feb | Jun |
|---|---|---|
| 1 | 1 | 5 |
| 5 | 2 | 6 |
| 3 | 3 | 7 |
| 7 | 7 | 8 |
关键说明
df['Jun'].shift(1):获取前一行Jun列的值,第一行Jan若为NaN则无法填充(因为没有上一行)fillna():仅替换Jan列中的NaN值,不影响其他列bfill(axis=1):按行方向从右往左取非NaN值填充左侧的NaN,实现同行向右填充的原有功能
内容的提问来源于stack exchange,提问作者Linear17
相关产品推荐
相关产品推荐

