我有一个数据框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(使用eq
和any
):
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