python pandas选择两列(不)相等的行

kkj*_*joe 9 python pandas

hsp.loc[hsp['Len_old'] == hsp['Len_new']]
Run Code Online (Sandbox Code Playgroud)

我尝试此代码,它正在工作。

但是我尝试了这三个

hsp.loc[hsp['Type_old'] == hsp['Type_new']] 
hsp.loc[hsp['Type_old'] != hsp['Type_new']] 
hsp.loc[hsp['Len_old'] != hsp['Len_new']] 
Run Code Online (Sandbox Code Playgroud)

他们没有工作。

我的数据表hsp就像

id  Type_old  Type_new  Len_old  Len_new
1    Num       Num       15       15
2    Num       Char      12       12
3    Char      Num       10       8
4    Num       Num       4        5
5    Char      Char      9        10
Run Code Online (Sandbox Code Playgroud)

有没有一种更好的方法来选择两列不成对的行。

Vin*_*ceP 9

使用补码运算符 ~

hsp.loc[~(hsp['Type_old'] == hsp['Type_new'])]
Run Code Online (Sandbox Code Playgroud)

这使:

   id Type_old Type_new  Len_old  Len_new
1   2      Num     Char       12       12
2   3     Char      Num       10        8
Run Code Online (Sandbox Code Playgroud)

当布尔运算处理,补运算符是反转的便捷方式TrueFalse


piR*_*red 5

如何通过混淆==!=比较时pd.Series

符合预期

df[['Len_old', 'Len_new']].assign(NE=df.Len_old != df.Len_new)

   Len_old  Len_new     NE
0       15       15  False
1       12       12  False
2       10        8   True
3        4        5   True
4        9       10   True
Run Code Online (Sandbox Code Playgroud)

但是,如果该列的值之一是字符串!

df[['Len_old', 'Len_new']].assign(NE=df.Len_old.astype(str) != df.Len_new)

   Len_old  Len_new    NE
0       15       15  True
1       12       12  True
2       10        8  True
3        4        5  True
4        9       10  True
Run Code Online (Sandbox Code Playgroud)

确保两者是相同的类型。