python - np.where 多个逻辑语句 pandas

标签 python pandas numpy dataframe

我知道有很多关于使用 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

我想比较每个数据框中行的唯一性。为此,我需要检查一些选定列的所有值是否都相等。

从这里question : 如果我正在检查列 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))

哪个正确给出:

(array([], dtype=int64),)

即两个数据帧的所有列中的值独立相等。

这对于小型数据框来说没问题,但我的真实数据框有大量我必须检查的列。 np.where 条件太长,无法准确写出。

相反,我想将我的列放入列表中:

columns_check_list = ['A','B','C','D','E','F'] 

并使用我的 np.where 语句自动对所有列执行检查。

这显然行不通,但它正是我正在寻找的表单类型。像这样的东西:

check = np.where([df[column) != df[column] | for column in columns_check_list]) 

我怎样才能做到这一点?

注意事项:

  • 我有很多专栏
  • 我的数据格式是固定的。
  • 列中的值可以包含 stringsfloats

最佳答案

看来你需要all用于检查每行的所有值是否为 Trueany如果每行至少有一个值为 True:

mask= ~(df1[columns_check_list] == df2[columns_check_list]).all(axis=1).values
print (mask)
[False False False]

或更具可读性,谢谢IanS :

mask= (df1[columns_check_list] != df2[columns_check_list]).any(axis=1).values
print (mask)
[False False False]

也可以比较 numpy 数组:

mask= (df1[columns_check_list].values != df2[columns_check_list].values).any(axis=1)
print (mask)
[False False False]

关于python - np.where 多个逻辑语句 pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43677505/

相关文章:

python - Pandas 数据框到Google大查询

python - 读取 SQL 文件并使用 Count Vectorizer 获取单词出现次数

python - 使用 Numpy 高效地按行排列数组

python - 实用Python项目的Setup.py

python - 如何在 python 中导入已完成进程的环境变量?

python - 比较列中的值并返回 bool 值

python - 返回多个范围的 numpy 数组

Python:将分组均值分配给一维数组

python - 字典中堆的最大元素

python - 将 Watson Assistant 的答案传递给变量 Python