如何在Pandas中仅对col2为NaN的行执行前向填充?
仅对col2为NaN的行执行前向填充的解决方案
问题背景
原始DataFrame:
col1 col2 col3 0 a 1.0 1.0 1 b NaN NaN 2 c 5.0 3.0 3 d 5.0 NaN
需求:仅对col2为NaN的行执行前向填充,最终得到如下结果:
col1 col2 col3 0 a 1.0 1.0 1 b 1.0 1.0 2 c 5.0 3.0 3 d 5.0 NaN
之前尝试的全局填充代码会对所有NaN生效(比如第3行的col3),不符合需求:
df['col2'] = df['col2'].fillna(method="ffill") df['col3'] = df['col3'].fillna(method="ffill")
正确实现方法
方案1:掩码筛选目标行
通过布尔掩码标记需要处理的行,仅对这些行执行前向填充:
# 生成掩码:标记col2为NaN的行 mask = df['col2'].isna() # 仅对掩码匹配的行的col2、col3执行前向填充 df.loc[mask, ['col2', 'col3']] = df.loc[mask, ['col2', 'col3']].ffill()
方案2:借助临时填充结果
先对整个DataFrame做全局前向填充,再将结果仅覆盖到目标行:
# 生成全局前向填充后的临时DataFrame ffilled_temp = df.ffill() # 仅替换col2为NaN的行的数据 df.loc[df['col2'].isna(), ['col2', 'col3']] = ffilled_temp.loc[df['col2'].isna(), ['col2', 'col3']]
两种方法都能精准控制填充范围,确保只有col2为NaN的行被前向填充,其他行的NaN值保持不变。
内容的提问来源于stack exchange,提问作者spg719
相关产品推荐
相关产品推荐

