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

Pandas column comparison so that two columns simultaneously are not equal to a value

我有一个数据框 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

按位 | 将两个掩码链接起来 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

IIUC,你想检查至少有一个列不是 v1(使用 eq and 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