我有一个函数,其中一个传递一个Pandasdf,它将返回布尔值1或0的基础上,如果一些条件得到满足。
你可以使用Python内置的运算符来使用多个OR语句吗?例如,我需要查看dataframe行***中是否满足***3个条件,但operator
只能接受2个变量。我用Pytest测试了这个函数,这不起作用。感谢您的任何建议或伪代码。
import operator
import pandas as pd
def fault_finder(df):
df['flag'] = operator.or_( # <-- 1st operator statement
(df['temp1'] >= df['temp2'])
# verify operating state 2
& (df['free_clg_signal'] > .2)
& (df['mechanical_clg_signal'] < .1), # OR
operator.or_( # <-- 2nd operator statement
# verify operating state 3
(df['temp1'] >= df['temp2'])
& (df['mechanical_clg_signal'] > .01)
& (df['free_clg_signal'] == .2), # OR
# verify operating state 4
(df['temp1'] >= df['temp2'])
& (df['mechanical_clg_signal'] > .01)
& (df['free_clg_signal'] > .9)
)
).astype(int)
return df
2条答案
按热度按时间sbtkgmzw1#
您可以使用
numpy.logical_or.reduce
:或者
|
和括号:示例:
ua4mk5z42#
不幸的是,
operator.or_
只能接受两个参数。所以如果你有两个以上的布尔掩码,你就需要嵌套调用operator.or_
。但是为什么不使用|
呢?这相当于不那么详细的:
您也可以使用函数式方法;比如:
如果布尔序列在一个 Dataframe 中,你也可以使用
pd.DataFrame.any
和一个轴参数。或
numpy.any
:但numpy方法将返回一个数组,而不是
pd.Series
。