Pandas中的 &=、|=和~是什么意思?

3

我经常在工作中看到这样的代码:

overlap &= group['ADMSN_DT'].loc[i] <= group['epi_end'].loc[j]

我的问题是在pandas中,像&=|=~这样的操作符具体是做什么用的?


1
在大多数基于C的编程语言中,它们都有快捷方式。foo X= ... 简单地等同于 foo = foo X... - Marc B
所以 |= 表示交集,&= 表示并集? - bigdata
@Rhymoid 我明白原地操作符的作用。然而,我不确定这些是原地操作符还是位运算符(可能是)。 - bigdata
@rhymoid 对于所有烦人的问题我表示抱歉,但是这些类型的运算符只适用于numpy数组和pandas系列或数据框吗? - bigdata
2
它们与联合或交集无关。pd.Series([True, False, True])&pd.Series([False, True, True])返回pd.Series([False, False, True]),因此运算符是逐个元素应用的。 - ayhan
显示剩余6条评论
1个回答

3

文档中得知:

运算符包括:| 表示或,& 表示与,~ 表示非。必须使用括号进行分组。

增强赋值语句

增强赋值语句会先计算目标(不同于普通的赋值语句,目标不能是解包),然后计算表达式列表,在两个操作数上执行特定于赋值类型的二进制操作,并将结果赋回原始目标。目标只被计算一次。

就像 a += 1 增加了 a 的值,a &= b 对比了 ab 的值,并将结果赋给了 a

a = 1
b = 0
print(a & b)
>>> 0
a &= b
print(a)
>>> 0

以下是一个 pandas 的例子

让我们生成一个由0和1组成的数据帧。

import numpy as np
import pandas as pd
a = pd.DataFrame(np.random.randint(0, 2, size=(6,4)), columns=list('ABCD'))
b = pd.DataFrame(np.random.randint(0, 2, size=(6,4)), columns=list('ABCD'))

我们的初始数据框

print(a)
   A  B  C  D
0  0  1  1  0
1  0  0  1  0
2  1  0  0  1
3  1  1  0  0
4  0  0  0  1
5  0  0  0  0
print(b)
   A  B  C  D
0  0  0  0  0
1  1  1  1  0
2  0  1  1  1
3  0  1  1  1
4  1  1  1  0
5  1  1  1  1
< p > ab 的第四行

print(a.loc[3])
A    1
B    1
C    0
D    0
Name: 1, dtype: int32
print(b.loc[3])
A    0
B    1
C    1
D    1
Name: 1, dtype: int32

现在评估并分配第4行

a.loc[3] &= b.loc[3]
< p> a 的第四行已更改。 只有在两行在相同位置都有1的情况下,才会将1写回 a

print(a.loc[3])
A    0
B    1
C    0
D    0
Name: 3, dtype: int32

对于 & 和 |,如果后面跟着一个 = 符号,它代表什么意思?例如所示。 - bigdata
@bigdata 执行操作,然后将结果赋值给左侧的名称 - Patrick Haugh
所以对于以下代码:import numpy as np a = pd.DataFrame(np.random.randn(6,4),columns=list('ABCD')) b = pd.DataFrame(np.random.randn(6,4),columns=list('ABCD')) a &= b - bigdata
对于以下代码: import numpy as np a = pd.DataFrame(np.random.randn(6,4),columns=list('ABCD')) b = pd.DataFrame(np.random.randn(6,4),columns=list('ABCD')) a &= b 会返回以下错误: TypeError: ufunc 'bitwise_and' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe'' - bigdata
@bigdata 您需要相应的数据类型,请参考更新后的示例。 - Maximilian Peters

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