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

Tvd*_*vdM 3 python dataframe pandas

我想根据每个特定行中的其他值为Pandas数据框创建一个新列,填充True或False.我解决此任务的方法是应用一个函数检查数据框中每一行的布尔条件,并使用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)
Run Code Online (Sandbox Code Playgroud)

这是我写的功能:

def ops_on(row):
   return row[('Feed' > 10)
              & ('Pressure' > 10)
              & ('Temp' > 10)
             ]
Run Code Online (Sandbox Code Playgroud)

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

df1['ops_on'] = df1.apply(ops_on, axis='columns')
Run Code Online (Sandbox Code Playgroud)

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

TypeError :('str'和'int'实例之间不支持"'>','发生在索引0')

感谢您的帮助.

jpp*_*jpp 6

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

df1['ops_on'] = (df1['Feed'] > 10) & (df1['Pressure'] > 10) & (df1['Temp'] > 10)
Run Code Online (Sandbox Code Playgroud)

的&("和")运算符应用于布尔系列逐元素.可以链接任意数量的这种条件.


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

df1['ops_on'] = df1[['Feed', 'Pressure', 'Temp']].gt(10).all(1)
Run Code Online (Sandbox Code Playgroud)

  • 第一次使用 stackoverflow,感谢您向我展示了它的强大功能。你的建议很好。 (2认同)