如何用Pandas将选中单元格填充为列中前一个非NaN值
使用Pandas实现指定行替换为前序非NaN值
解决方案1:简洁批量替换
通过前向填充+取值替换的方式快速完成需求:
import pandas as pd import numpy as np # 初始化数据集 df = pd.DataFrame({ 'A': ['x', 'x', 'y', 'z'], 'B': ['a', np.nan, 'c', 'd'] }) # 获取最后两行之前的所有行中,各列的最终非NaN有效值 fill_values = df.iloc[:-2].ffill().iloc[-1] # 替换最后两行 df.iloc[-2:] = fill_values
解决方案2:逐列精准处理
如果需要更明确地控制每一列的取值逻辑,可以逐列定位最后一个有效索引后替换:
import pandas as pd import numpy as np df = pd.DataFrame({ 'A': ['x', 'x', 'y', 'z'], 'B': ['a', np.nan, 'c', 'd'] }) # 处理A列:找到前两行中最后一个非NaN值的索引,替换最后两行 last_valid_A_idx = df['A'].iloc[:-2].last_valid_index() df.loc[df.index[-2:], 'A'] = df['A'].loc[last_valid_A_idx] # 处理B列:找到前两行中最后一个非NaN值的索引,替换最后两行 last_valid_B_idx = df['B'].iloc[:-2].last_valid_index() df.loc[df.index[-2:], 'B'] = df['B'].loc[last_valid_B_idx]
结果验证
执行上述代码后,数据集会变为目标样式:
| A | B |
|---|---|
| x | a |
| x | nan |
| x | a |
| x | a |
内容的提问来源于stack exchange,提问作者kyara
相关产品推荐
相关产品推荐

