Pandas数据框中的新列基于布尔条件

时间:2018-03-22 15:06:13

标签: python pandas dataframe

我想根据每个特定行中的其他值,为填充了True或False的Pandas数据框创建一个新列。我解决此任务的方法是应用一个函数检查数据框中每一行的布尔条件,并使用True或False填充新列。

这是数据框:

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)

这是我写的函数:

def ops_on(row):
   return row[('Feed' > 10)
              & ('Pressure' > 10)
              & ('Temp' > 10)
             ]

ops_on函数用于创建新列[' ops_on']:

df1['ops_on'] = df1.apply(ops_on, axis='columns')

不幸的是,我收到此错误消息:

TypeError :("'>'' str'' int'"'' ;发生在索引0')

感谢您的帮助。

2 个答案:

答案 0 :(得分:6)

你应该按列(向量化,高效)而不是行(低效,Python循环)工作:

df1['ops_on'] = (df1['Feed'] > 10) & (df1['Pressure'] > 10) & (df1['Temp'] > 10)

&("和")运算符按元素方式应用于布尔系列。可以链接任意数量的此类条件。

或者,对于您多次执行相同比较的特殊情况:

df1['ops_on'] = df1[['Feed', 'Pressure', 'Temp']].gt(10).all(1)

答案 1 :(得分:1)

在您当前的设置中,只需重写您的功能:

def ops_on(row):
    return (row['Feed'] > 10) & (row['Pressure'] > 10) & (row['Temp'] > 10)