Pandas中& =,| =和〜做了什么

时间:2016-10-19 20:27:27

标签: python python-2.7 pandas

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

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

我的问题是,&=|=~等运营商在熊猫中做了什么?

1 个答案:

答案 0 :(得分:2)

来自documentation

  

运营商是:| for or,&amp;为和,和〜为没有。这些必须是   使用括号分组。

Augmented assignment statements

  

增强分配评估目标(与正常情况不同)   赋值语句,不能解包)和表达式   list,执行特定于赋值类型的二进制操作   在两个操作数上,并将结果分配给原始目标。   目标仅评估一次。

就像a += 1增量aa &= b比较ab,并将结果分配给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

ab

的第4行
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