Pandas如何使用列中现有非空值填充同列对应空单元格?
问题说明
现有如下结构的DataFrame:
A B a a a b a a a B
需要填充B列的空值,最终输出结果如下:
A B a b a b a b a B a B a B
解决方案
方案1:直接向后填充(适配当前场景)
当前场景中空值后面紧邻的就是对应要填充的非空值,直接用bfill()方法即可一步完成:
df['B'] = df['B'].bfill()
方案2:按3行分组填充(更通用,适配组内非空值位置不固定的场景)
如果后续非空值不一定出现在每组的最后一行,可以先按每3行分组,再用组内的唯一非空值填充整组:
# 生成分组标签,每3行一组 df['group'] = df.index // 3 # 分组填充B列 df['B'] = df.groupby('group')['B'].transform(lambda x: x.ffill().bfill()) # 可选:删除辅助生成的group列 df.drop('group', axis=1, inplace=True)
方案3:按原思路调整实现
之前操作失败是因为dropna后的Series保留了原始索引,直接重复3次后索引和原DataFrame无法对齐,调整后代码如下:
# 提取非空值并重置索引 tmp = df['B'].dropna().reset_index(drop=True) # 每个值重复3次后重置索引,赋值给原B列 df['B'] = tmp.repeat(3).reset_index(drop=True)
内容的提问来源于stack exchange,提问作者Catherine
相关产品推荐
相关产品推荐

