You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas如何仅对Y列值为1的行的Z列NaN值执行bfill后向填充

实现方法

核心思路是先得到整列Z后向填充的结果,再仅将Y值为1的行的Z列替换为填充后的值,其余行保持原始数据不变,且后向填充的规则和全列填充完全一致,不会出现筛选后行顺序错乱导致的填充错误。

代码实现

写法1(易读版,带临时列)

  • 生成全列后向填充的临时结果
df['Z_temp_bfill'] = df['Z'].bfill()
  • 仅更新Y值为1的行的Z列数据
df.loc[df['Y'] == 1, 'Z'] = df.loc[df['Y'] == 1, 'Z_temp_bfill']
  • 删除临时列(不需要保留中间结果的话执行即可)
df.drop(columns=['Z_temp_bfill'], inplace=True)

写法2(精简版,无临时列)

可以把逻辑合并为一行,无需生成额外的辅助列:

df.loc[df['Y'] == 1, 'Z'] = df['Z'].bfill().loc[df['Y'] == 1]

说明:pandas的bfill()方法默认仅修改NaN值,非空的原始单元格不会被覆盖,符合你只填充缺失值的需求。
如果你需要仅在Y=1的行范围内做后向填充(即填充时不会用Y≠1的行的Z值作为填充来源),可以用以下写法:

df.loc[df['Y'] == 1, 'Z'] = df.loc[df['Y'] == 1, 'Z'].bfill()

内容的提问来源于stack exchange,提问作者Trigger Happy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 17:51:00