如何在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
解决方案
只需先筛选出需要检查的指定列,再执行原逻辑即可:
- 定义要检查的目标列:
target_cols = ['A', 'B', 'C']
- 生成新列:
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
相关产品推荐
相关产品推荐

