Chu*_*uck 5 python numpy dataframe pandas
我知道关于使用链式逻辑运算符的主题有很多问题np.where.
我有 2 个数据框:
df1
A B C D E F Postset
0 1 2 3 4 5 6 yes
1 1 2 3 4 5 6 no
2 1 2 3 4 5 6 yes
df2
A B C D E F Preset
0 1 2 3 4 5 6 yes
1 1 2 3 4 5 6 yes
2 1 2 3 4 5 6 yes
Run Code Online (Sandbox Code Playgroud)
我想比较每个数据框中行的唯一性。为此,我需要检查多个选定列的所有值是否都相等。
从这个问题来看:如果我正在检查列,a b c d e f我可以这样做:
np.where((df1.A != df2.A) | (df1.B != df2.B) | (df1.C != df2.C) | (df1.D != df2.D) | (df1.E != df2.E) | (df1.F != df2.F))
Run Code Online (Sandbox Code Playgroud)
哪个正确给出:
(array([], dtype=int64),)
Run Code Online (Sandbox Code Playgroud)
即两个数据帧的所有列中的值独立相等。
这对于小型数据框来说很好,但我的真实数据框有大量我必须检查的列。条件np.where太长,无法准确写出。
相反,我想将我的列放入列表中:
columns_check_list = ['A','B','C','D','E','F']
Run Code Online (Sandbox Code Playgroud)
并使用我的np.where语句自动对所有列执行检查。
这显然行不通,但它正是我正在寻找的形式。就像是:
check = np.where([df[column) != df[column] | for column in columns_check_list])
Run Code Online (Sandbox Code Playgroud)
我怎样才能实现这个目标?
注意事项:
strings或floats。看来您需要all检查所有值是否都是True每行,或者any是否至少有一个值是True每行:
mask= ~(df1[columns_check_list] == df2[columns_check_list]).all(axis=1).values
print (mask)
[False False False]
Run Code Online (Sandbox Code Playgroud)
或者更具可读性,谢谢IanS:
mask= (df1[columns_check_list] != df2[columns_check_list]).any(axis=1).values
print (mask)
[False False False]
Run Code Online (Sandbox Code Playgroud)
也可以比较numpy array:
mask= (df1[columns_check_list].values != df2[columns_check_list].values).any(axis=1)
print (mask)
[False False False]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2600 次 |
| 最近记录: |