np.where multiple logical statements pandas
我知道关于使用
我有2个数据框:
1 2 3 4 5 6 7 8 9 10 11 | 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 |
我想比较每个数据框中的行的唯一性。为此,我需要检查多个选定列的所有值是否相等。
从这个问题出发:如果我正在检查
1 | 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)) |
正确给出:
1 | (array([], dtype=int64),) |
也就是说,两个数据帧的所有列中的值都独立相等。
这对于较小的数据框来说很好,但是我的实际数据框具有必须检查的大量列。
相反,我想将自己的列放入列表中:
1 | columns_check_list = ['A','B','C','D','E','F'] |
并使用我的
这显然行不通,但是它是我要查找的表格类型。就像是:
1 | check = np.where([df[column) != df[column] | for column in columns_check_list]) |
我该如何实现?
注意事项:
- 我有很多专栏
- 我的数据格式是固定的。
-
列中的值可以包含
strings 或floats 。
似乎您需要
1 2 3 | mask= ~(df1[columns_check_list] == df2[columns_check_list]).all(axis=1).values print (mask) [False False False] |
或更可读,谢谢IanS:
1 2 3 | mask= (df1[columns_check_list] != df2[columns_check_list]).any(axis=1).values print (mask) [False False False] |
也可以比较
1 2 3 | mask= (df1[columns_check_list].values != df2[columns_check_list].values).any(axis=1) print (mask) [False False False] |
您可以对比较的值使用
1 2 3 | >>> import numpy as np >>> np.logical_or.reduce((df1 != df2).values, axis=1) # along rows array([False, False, False], dtype=bool) # each value represents a row |
您可能需要在比较之前排除列:
1 | (df1[include_columns_list] != df2[include_columns_list]).values |
或之后:
1 | (df1 != df2)[include_columns_list].values |
除了