Pandas中的逐元素逻辑或

103 投票
4 回答
141397 浏览
提问于 2025-04-18 13:30

我知道“与”对应的是 &,而“非”对应的是 ~。那么,逐元素的逻辑“或”运算符是什么呢?我知道“or”这个词不是我想要的。

4 个回答

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

# 使用数据框的示例

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

在Series或数据框中,|运算符或者or关键字用于对对应的元素进行逐个的逻辑“或”运算。结果的Series或数据框中,如果输入的Series或数据框中至少有一个对应的元素为真(True),那么结果就会是真(True)。

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

使用 evalor 你可以返回一个布尔序列(这里的 or 也可以正常作为逐个元素的运算符使用)。

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

要对两个序列 ab 进行逐元素的逻辑“或”运算,只需要这样做:

a | b
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进行逻辑操作的更多信息,可以在 这里 找到。

撰写回答