Pandas 中的逐元素逻辑或

问题描述 投票:0回答:4

我知道AND对应于

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

python pandas boolean-logic logical-operators boolean-operations
4个回答
156
投票

对应的运算符是

|
:

 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 逻辑运算的更多信息可以在这里找到。


12
投票

要对两个系列

a
b
进行逐元素逻辑或运算

a | b

1
投票

如果您对单个数据帧的列进行操作,则

eval
query
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

0
投票
import pandas as pd

# Example with Series
s1 = pd.Series([True, False, True])
s2 = pd.Series([False, True, True])

result = s1 | s2

print(result)

输出:

0     True
1     True
2     True
dtype: bool

# DataFrames 示例

import pandas as pd


df1 = pd.DataFrame({'A': [True, False, True], 'B': [False, True, False]})
df2 = pd.DataFrame({'A': [False, True, True], 'B': [True, False, True]})

result = df1 | df2

print(result)

输出:

       A      B
0   True   True
1   True   True
2   True   True

|运算符或 or 关键字用于在 Series 或 DataFrame 中的相应元素之间执行逐元素逻辑或。生成的 Series 或 DataFrame 将具有 True,其中输入 Series 或 DataFrame 中至少有一个相应元素为 True。

© www.soinside.com 2019 - 2024. All rights reserved.