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

基于布尔条件为Pandas DataFrame创建新列的实现方法

给Pandas DataFrame新增条件判断列的实现方法

嘿,我来帮你搞定这个需求!你想要给DataFrame新增一列,根据每行其他列的布尔条件返回True或False,用自定义函数的思路完全可行,不过我也会给你推荐更高效的实现方式——毕竟处理大数据量的时候,效率可是关键。

首先先确认你的目标DataFrame:

import pandas as pd

l = {'DayTime':['2018-03-01','2018-03-02','2018-03-03'],
     'Pressure': [9,10.5,10.5], 
     'Feed':[9,10.5,11], 
     'Temp':[9,10.5,11]}
df1 = pd.DataFrame(l)

方法一:自定义函数 + apply 逐行处理

这就是你提到的思路,先写一个判断每行条件的函数,再用apply把函数应用到每一行(注意设置axis=1表示按行处理)。

举个例子,假设你的判断条件是:当Pressure等于Feed,且Temp大于10时返回True,否则返回False,函数可以这么写:

def check_row_condition(row):
    # 这里替换成你实际需要的布尔判断逻辑
    return row['Pressure'] == row['Feed'] and row['Temp'] > 10

然后给DataFrame新增列:

df1['Condition_Passed'] = df1.apply(check_row_condition, axis=1)

运行后你的DataFrame会变成这样:

DayTime  Pressure  Feed  Temp  Condition_Passed
0 2018-03-01       9.0   9.0   9.0             False
1 2018-03-02      10.5  10.5  10.5              True
2 2018-03-03      10.5  11.0  11.0             False

这个方法的好处是逻辑清晰,适合处理复杂的、需要多行数据联动或者自定义逻辑的判断,但缺点是逐行处理效率较低,数据量很大的时候会比较慢。

方法二:向量化操作(推荐)

如果你的条件是列之间的简单比较,强烈推荐用Pandas的向量化操作——它基于numpy批量处理,效率比apply高得多。

还是用刚才的条件,向量化的写法是:

# 注意用&表示元素级逻辑与,每个条件要加括号(因为运算符优先级问题)
df1['Condition_Passed'] = (df1['Pressure'] == df1['Feed']) & (df1['Temp'] > 10)

得到的结果和上面完全一样,但运行速度会快很多,尤其是当你的DataFrame有几万甚至几十万行的时候,这个差距会非常明显。

如果是逻辑或的话,就用|;逻辑非用~,比如:

# 示例:Pressure不等于Feed 或者 Temp小于等于10
df1['Condition_Failed'] = (df1['Pressure'] != df1['Feed']) | (df1['Temp'] <= 10)

你可以根据自己的实际需求替换这些布尔条件就行啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:28:59