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

如何在Pandas中高效生成逐行多列布尔判断的新列(无循环)

问题

我有如下所示的Pandas DataFrame,希望找到一种高效简洁的方法生成布尔类型列d:当对应行的a、b、c列中任意一个值为True时,d的值为True,且要求不能用for循环。我试过向量化操作但没成功,之前用any()方法时,它会判断整个DataFrame里是否存在True,而不是逐行判断;用for循环逐行调用any()能得到正确结果,但数据量大时速度太慢。

示例DataFrame:

abc
TrueFalseTrue
FalseTrueFalse
FalseFalseFalse
解决方案

直接用any()方法并指定axis=1参数,就能实现逐行判断,完全基于向量化操作,效率拉满。

代码示例

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    'a': [True, False, False],
    'b': [False, True, False],
    'c': [True, False, False]
})

# 生成列d
df['d'] = df[['a', 'b', 'c']].any(axis=1)

执行结果

abcd
TrueFalseTrueTrue
FalseTrueFalseTrue
FalseFalseFalseFalse

说明

  • axis=1参数告诉any()要逐行检查列维度,而默认的axis=0是逐列检查行维度,这就是你之前用any()得到整个DataFrame结果的原因。
  • 这种方法完全避开了循环,用的是Pandas优化过的向量化运算,大数据量下速度远快于循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 23:33:25