Pandas中的逐元素逻辑或
我知道“与”对应的是 &
,而“非”对应的是 ~
。那么,逐元素的逻辑“或”运算符是什么呢?我知道“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
如果你在一个数据表的列上进行操作,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
你可以返回一个布尔序列(这里的 or
也可以正常作为逐个元素的运算符使用)。
df.eval('A > 1 or B > 2')
# 0 False
# 1 True
# 2 False
# dtype: bool
12
要对两个序列 a
和 b
进行逐元素的逻辑“或”运算,只需要这样做:
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进行逻辑操作的更多信息,可以在 这里 找到。