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

如何用Python Pandas从三列中选取首个非空值生成新列

在Pandas DataFrame中提取指定列的首个非空值到新列

嘿,这个需求处理起来很简单,我给你两种实用的实现方式,分别适配不同场景:

方法一:向量化操作(推荐,适合大数据集)

这种方式用Pandas的内置向量化方法,速度快效率高,是处理这类问题的首选方案。

步骤:

  1. 先导入需要的库,并构造示例数据(注意Pandas里用np.nan表示空值):
import pandas as pd
import numpy as np

# 构造示例DataFrame
data = {
    'name': ['Tom', 'John', 'Lily'],
    'homePhone': [888, np.nan, np.nan],
    'workPhone': [666, 777, np.nan],
    'CellPhone': [np.nan, np.nan, 333]
}
df = pd.DataFrame(data)
  1. 核心逻辑:选中目标三列后,沿行方向(axis=1)执行向后填充(bfill),这样每行的首个非空值会被填充到该列组的第一列位置,最后提取这一列的值即可:
# 生成'I want'列
df['I want'] = df[['homePhone', 'workPhone', 'CellPhone']].bfill(axis=1).iloc[:, 0]

方法二:逐行处理(直观易理解,适合小数据集)

如果你更看重代码的可读性,也可以用apply逐行处理,精准定位每行的第一个非空值:

df['I want'] = df[['homePhone', 'workPhone', 'CellPhone']].apply(
    lambda row: row[row.first_valid_index()], axis=1
)

两种方法运行后,你都会得到符合预期的结果:

namehomePhoneworkPhoneCellPhoneI want
Tom888.0666.0NaN888.0
JohnNaN777.0NaN777.0
LilyNaNNaN333.0333.0

补充提示:如果某行的三列全为空,两种方法都会生成NaN,你可以根据需求用fillna()补充自定义默认值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:56:14