Pandas如何逐行汇总指定列非空值生成新列并完成前向填充?
pandas逐行提取多列非空值生成新列并前向填充实现
原始数据与需求
现有DataFrame的三列示例数据如下:
col_A col_B col_C 0 NaN 1.0 NaN 1 NaN NaN NaN 2 NaN NaN 2.0 3 3.0 NaN 4.0
需求逻辑:
- 逐行提取
col_A/col_B/col_C中的非空值生成新列new_col - 单行存在多个非空值时,支持两种取值规则:取平均值、取首个非空值
- 对
new_col中全为空的行做前向填充(forward filling) - 未填充阶段预期效果:
new_col 0 1.0 1 NaN 2 2.0 3 3.5
- 前向填充后预期效果:
new_col 0 1.0 1 1.0 2 2.0 3 3.5
具体实现代码
步骤1:逐行计算生成初始新列
规则1:多非空值取平均值(匹配示例效果)
pandas内置的行方向均值计算会自动跳过NaN值,全空行默认返回NaN,无需额外写非空判断逻辑:
# 选中目标三列,按行求均值 df['new_col'] = df[['col_A', 'col_B', 'col_C']].mean(axis=1)
规则2:多非空值取首个非空值
通过行方向的向后填充,取填充后每行的第一个值,即可得到从左到右第一个出现的非空值:
df['new_col'] = df[['col_A', 'col_B', 'col_C']].bfill(axis=1).iloc[:, 0]
步骤2:前向填充空值
直接调用pandas的前向填充方法,即可将空值替换为上方最近的非空值:
df['new_col'] = df['new_col'].ffill()
你之前使用的
df[['col_A', 'col_B', 'col_C']].count(axis=1) >= 1是判断每行非空值数量的逻辑,上述内置方法已经自动处理了空值跳过逻辑,不需要额外加这层判断。
内容的提问来源于stack exchange,提问作者ajoseps
相关产品推荐
相关产品推荐

