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

在Pandas中选取首个真值列的高效优化方案问询

Pandas中获取两列首个真值的高效优化方案

问题背景

现有如下结构的DataFrame:

Set_OneSet_Two
'Foo'''
'''Bar'
'Foo''Bar'

需要获取每行两列中的首个真值(此处空字符串为假值,非空字符串为真值),预期结果如下:

Result
'Foo'
'Bar'
'Foo'

最初使用df.apply(lambda x : x.Set_One or x.Set_Two)实现需求,但数据集增大后性能明显下降;尝试直接写df['Set_One'] or df['Set_Two']会因Series真值歧义报错;使用&/|运算符无法适配字符串的真假判断逻辑。

最佳实践

方法1:Pandas原生where方法

利用Series.where()的向量化特性,直接实现逻辑:当Set_One为真值(非空)时保留原值,否则取Set_Two的值:

result = df['Set_One'].where(df['Set_One'] != '', df['Set_Two'])

这是最贴合Pandas风格的写法,完全基于原生向量化实现,性能远高于apply,代码简洁易读。

方法2:NumPynp.where方法

如果习惯用NumPy的API,也可以用np.where实现相同逻辑:

import numpy as np
result = np.where(df['Set_One'] != '', df['Set_One'], df['Set_Two'])

同样是纯向量化操作,性能和Pandaswhere相当,适合需要和其他NumPy逻辑结合的场景。

关于np.vectorize的说明

你尝试的np.vectorize方法确实比apply快,但它本质是封装了循环的伪向量化,并非真正的底层向量化实现。相比之下,上面两种原生向量化方法不仅性能更优,代码也更简洁优雅,是这类场景的首选方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 08:27:45