我经常在工作中看到这样的代码:
overlap &= group['ADMSN_DT'].loc[i] <= group['epi_end'].loc[j]
我的问题是在pandas中,像&=
、|=
和~
这样的操作符具体是做什么用的?
我经常在工作中看到这样的代码:
overlap &= group['ADMSN_DT'].loc[i] <= group['epi_end'].loc[j]
我的问题是在pandas中,像&=
、|=
和~
这样的操作符具体是做什么用的?
从文档中得知:
运算符包括:| 表示或,& 表示与,~ 表示非。必须使用括号进行分组。
增强赋值语句会先计算目标(不同于普通的赋值语句,目标不能是解包),然后计算表达式列表,在两个操作数上执行特定于赋值类型的二进制操作,并将结果赋回原始目标。目标只被计算一次。
就像 a += 1
增加了 a
的值,a &= b
对比了 a
和 b
的值,并将结果赋给了 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)
< p >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
a
和 b
的第四行
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
foo X= ...
简单地等同于foo = foo X...
。 - Marc Bpd.Series([True, False, True])&pd.Series([False, True, True])
返回pd.Series([False, False, True])
,因此运算符是逐个元素应用的。 - ayhan