Python 你怎么办,还有~~你在熊猫身上做什么
我经常在工作中看到这样的代码:Python 你怎么办,还有~~你在熊猫身上做什么,python,python-2.7,pandas,Python,Python 2.7,Pandas,我经常在工作中看到这样的代码: overlap &= group['ADMSN_DT'].loc[i] <= group['epi_end'].loc[j] overlap&=group['ADMSN_DT'].loc[i] 运算符为:| for or、&for and和~ for not。这些一定是 使用括号分组 增强分配评估目标(与正常分配不同 赋值语句,不能是解包语句)和表达式 列表中,执行特定于赋值类型的二进制操作 并将结果赋给原始目标。 目标仅评估一次 就像a+=1递
overlap &= group['ADMSN_DT'].loc[i] <= group['epi_end'].loc[j]
overlap&=group['ADMSN_DT'].loc[i]
运算符为:| for or、&for and和~ for not。这些一定是
使用括号分组
增强分配评估目标(与正常分配不同
赋值语句,不能是解包语句)和表达式
列表中,执行特定于赋值类型的二进制操作
并将结果赋给原始目标。
目标仅评估一次
就像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
print(a.loc[3])
print(a.loc[3])
现在计算并分配第4行
a.loc[3] &= b.loc[3]
a
的第4行已更改。只有当两行的1位于同一位置时,1才会写回a
a = 1
b = 0
print(a & b)
>>> 0
a &= b
print(a)
>>> 0
在大多数基于c-ish的语言中,它们都是捷径foo X=…
只是foo=foo X…。
因为“”,您可能会想知道。这些是在系列/数据帧上工作的元素逻辑运算符。对于赋值(ser1&=ser2
),它们照常工作,正如Marc B所说:ser1=ser1&ser2
。那么|=表示相交,&=表示并集?它们与并集或相交无关pd.Series([True,False,True])&pd.Series([False,True,True])
返回pd.Series([False,False,True])
因此运算符是按元素应用的。对于&和|如果后面有一个=符号,如示例中所示,这意味着什么?@bigdata它执行该操作,然后将结果分配给左边的名称。因此,对于以下代码导入numpy,np a=pd.DataFrame(np.random.randn(6,4),columns=list('ABCD')b=pd.DataFrame(np.random.randn(6,4),columns=list('ABCD'))a&=bso对于以下代码导入numpy作为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返回类型错误error:ufunc“按位”和“不支持输入类型”,并且根据强制转换规则“安全”@bigdata,无法将输入安全强制为任何支持的类型。如果您需要可比较的数据类型,请参阅更新的示例。
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
a.loc[3] &= b.loc[3]
print(a.loc[3])
A 0
B 1
C 0
D 0
Name: 3, dtype: int32