我经常在工作中看到这样的代码:
overlap &= group['ADMSN_DT'].loc[i] <= group['epi_end'].loc[j]
我的问题是,&=
,|=
和~
等运营商在熊猫中做了什么?
答案 0 :(得分:2)
运营商是:| for or,&amp;为和,和〜为没有。这些必须是 使用括号分组。
Augmented assignment statements
增强分配评估目标(与正常情况不同) 赋值语句,不能解包)和表达式 list,执行特定于赋值类型的二进制操作 在两个操作数上,并将结果分配给原始目标。 目标仅评估一次。
就像a += 1
增量a
,a &= b
比较a
和b
,并将结果分配给a
。
a = 1
b = 0
print(a & b)
>>> 0
a &= b
print(a)
>>> 0
和pandas
示例
让我们生成一个零和一的数据帧。
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
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]
a
的第4行已更改。只有当两行在同一位置都有1时,才会将1写回a
。
print(a.loc[3])
A 0 B 1 C 0 D 0 Name: 3, dtype: int32