Pandas中的逐元素逻辑或

102

我知道AND对应于&,NOT对应于~。那么逐元素的逻辑OR运算符是什么?我知道“or”本身不是我要找的。

我知道AND对应于&,NOT对应于~。那么逐元素的逻辑OR运算符是什么?我知道“or”本身不是我要找的。
3个回答

155

对应的运算符是|

 df[(df < 3) | (df == 5)]

如果您需要对每个元素检查其是否小于3或等于5,则可以使用 np.logical_or 函数。 对于两个条件,您可以使用

df[np.logical_or(df<3, df==5)]

或者,对于多个条件,请使用 logical_or.reduce

df[np.logical_or.reduce([df<3, df==5])]

由于条件被指定为单独的参数,所以不需要使用括号分组。

有关在pandas中进行逻辑操作的更多信息可以在此处找到。


43
圆括号 很重要的。 - Gerard
5
|np.logical_or 在存在 NaN 的情况下表现不同。详情请参见 https://dev59.com/0loU5IYBdhLWcg3wxI2A - Frank
只是一条注释:or在这里不起作用,只有|起作用。 - Alan

12

要对两个系列 ab 进行逐元素的逻辑或运算,只需执行以下操作:

a | b

1
如果您在单个数据框的列上操作,evalquery 是选项,其中 or 逐个元素地工作。您不需要担心括号,因为比较运算符的优先级高于布尔/位运算符。例如,以下 query 调用返回列 A 值大于 1 并且列 B 值大于 2 的行。
df = pd.DataFrame({'A': [1,2,0], 'B': [0,1,2]})

df.query('A > 1 or B > 2')       # == df[(df['A']>1) | (df['B']>2)]
#    A  B
# 1  2  1

或者使用 eval 可以返回一个布尔序列(同样地,or 作为逐元素运算符也可以正常工作)。

df.eval('A > 1 or B > 2')
# 0    False
# 1     True
# 2    False
# dtype: bool

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接