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

如何在DataFrame中新增列,提取指定列的首个非空值

问题:提取指定列的首个非空值生成新列

我需要给DataFrame新增一列,要求仅检查指定的若干可能包含空值的列,提取每行中这些列的首个非空值;若指定列全为空,新列则保留为空。原DataFrame包含其他无关列,无需考虑。

示例

示例DataFrame(仅展示指定列):

import pandas as pd

data = [[None, 20, None],[30, None, 30],[10, None, None]]
df = pd.DataFrame(data, columns=['A', 'B', 'C'])
print(df)

输出:

A     B     C
0   NaN  20.0   NaN
1  30.0   NaN  30.0
2  10.0   NaN   NaN

我的尝试

我试过以下代码,但它会遍历整行所有列,不符合仅查看指定列的需求:

df['D'] = df.bfill(axis=1).iloc[:, 0]
print(df)

输出:

A     B     C     D
0   NaN  20.0   NaN  20.0
1  30.0   NaN  30.0  30.0
2  10.0   NaN   NaN  10.0

解决方案

只需先筛选出需要检查的指定列,再执行原逻辑即可:

  1. 定义要检查的目标列:
target_cols = ['A', 'B', 'C']
  1. 生成新列:
df['D'] = df[target_cols].bfill(axis=1).iloc[:, 0]

说明

  • df[target_cols]:仅保留需要检查的列,排除其他无关列;
  • bfill(axis=1):按行从右向左填充空值,此时每行的第一列会被填充为该行指定列中的首个非空值;
  • iloc[:, 0]:提取处理后的第一列作为新列的值,若指定列全为空则结果为NaN。

运行后得到符合需求的结果:

A     B     C     D
0   NaN  20.0   NaN  20.0
1  30.0   NaN  30.0  30.0
2  10.0   NaN   NaN  10.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 13:35:17