Pandas列比较,使两列同时不等于一个值



我有一个数据框df如下:

Col1    Val1    Val2   Val3
a       v1      v1     z1
b       v1      v3     x1
c       v2      v2     x2

我想得到以下内容:

Col1    Val1    Val2   Val3
b       v1      v3     x1
c       v2      v2     x2

我试了如下:

df = df[df['Val1'] != 'v1']
df = df[df['Val2'] != 'v1']

但是上面的步骤只得到第三行df。只有当两列都不等于v1

时,我才想删除行

检查any

out = df[df[['Val1','Val2']].ne('v1').any(1)]
Out[338]: 
Col1 Val1 Val2 Val3
1    b   v1   v3   x1
2    c   v2   v2   x2

IIUC,您想要检查至少有一个列不是v1(使用eqany):

df[df[['Val1', 'Val2']].ne('v1').any(1)]

或者,使用另一种语法:不是两个列都是v1(使用eq,all和布尔not~):

df[~df[['Val1', 'Val2']].eq('v1').all(1)]

输出:

Col1 Val1 Val2 Val3
1    b   v1   v3   x1
2    c   v2   v2   x2

|OR按位链起来:

df = df[(df['Val1'] != 'v1') | (df['Val2'] != 'v1')]
print (df)
Col1 Val1 Val2 Val3
1    b   v1   v3   x1
2    c   v2   v2   x2

最新更新