首页 > 解决方案 > 如何使用python比较两个数据框并获取不匹配的行?

问题描述

我有两个数据框,df1 和 df2。现在,df1 包含 6 条记录,df2 包含 4 条记录。我想从中获得无与伦比的记录。我试过了,但得到一个错误ValueError: Can only compare identically-labelled DataFrame objects我猜这是由于 df 的长度,因为 df1 有 6 而 df2 有 4 但我如何比较它们并获得不匹配的行?

代码

df1=
  a  b  c
0 1  2  3
1 4  5  6
2 3  5  5
3 5  6  7
4 6  7  8
5 6  6  6


df2 =
  a  b  c
0 3  5  5
1 5  6  7
2 6  7  8
3 6  6  6

index = (df != df2).any(axis=1)
df3 = df.loc[index]

这使:

ValueError: Can only compare identically-labelled DataFrame objects

预期输出:

 a  b  c
0 1  2  3
1 4  5  6

我知道错误是由于长度引起的,但是有什么方法可以比较两个数据帧并从中获取不匹配的记录?

标签: pythonpandasdataframeindexingrows

解决方案


MultiIndex.from_frame+isin

我们可以MultiIndex.from_frame在两者上使用df1df2创建相应的多索引,然后用于isin测试从df1in indexcreated from创建的索引的成员资格,df2以创建一个布尔掩码,然后可以使用该掩码过滤不匹配的行。

i1 = pd.MultiIndex.from_frame(df1)
i2 = pd.MultiIndex.from_frame(df2)
df1[~i1.isin(i2)]

结果

   a  b  c
0  1  2  3
1  4  5  6

推荐阅读