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