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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:36:21