Pandas 中的元素逻辑 OR

Element-wise logical OR in Pandas

提问人:Keith 提问时间:7/16/2014 最后编辑:cottontailKeith 更新时间:2/15/2023 访问量:138510

问:

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

python pandas 布尔逻辑逻辑 算符 运算

评论


答:

155赞 deinonychusaur 7/16/2014 #1

对应的运算符是:|

 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 8/8/2016
圆括号很重要
5赞 Frank 11/14/2019
|并在存在 NaN 的情况下表现不同。查看 stackoverflow.com/q/37131462/2596586np.logical_or
0赞 Alan 3/15/2020
只是一个评论:在这里不起作用。只有工作。or|
12赞 Jonathan Stray 5/13/2017 #2

取两个系列的元素逻辑 OR 并做ab

a | b
1赞 cottontail 2/15/2023 #3

如果对单个数据帧的列进行操作,并且是按元素工作的选项。您也无需担心括号,因为比较运算符的优先级高于布尔/按位运算符。例如,以下调用返回列 A 值为 >1 且列 B 值> 2 的行。evalqueryorquery

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

或者你可以返回一个布尔级数(同样可以作为元素运算符)。evalor

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