我有两个数据框:
df1
A1 B1
1 a
2 s
3 d
和
df2
A1 B1
1 a
2 x
3 d
我想比较 B1 列上的 df1 和 df2。 A1 列可用于连接。我想知道:
- 相对于 B1 列,df1 和 df2 中哪些行不同?
- 如果 A1 列的值不匹配。例如,df2 是否缺少 df1 中存在的某些值,反之亦然。如果有,是哪些?
我尝试使用合并和加入,但这不是我要找的。p>
最佳答案
我编辑了原始数据以说明 A1 键在一个数据框中的情况,但在另一个数据框中没有。
在进行合并时,您希望指定“外部”合并,以便您可以在一个数据框中看到这些带有 A1 键的项目,但在另一个数据框中看不到。
我添加了后缀“_1”和“_2”来指示 B1 列的数据帧源(_1 =
。 df1
和 _2 = df2
)
df1 = pd.DataFrame({'A1': [1, 2, 3, 4], 'B1': ['a', 'b', 'c', 'd']})
df2 = pd.DataFrame({'A1': [1, 2, 3, 5], 'B1': ['a', 'd', 'c', 'e']})
df3 = df1.merge(df2, how='outer', on='A1', suffixes=['_1', '_2'])
df3['check'] = df3.B1_1 == df3.B1_2
>>> df3
A1 B1_1 B1_2 check
0 1 a a True
1 2 b d False
2 3 c c True
3 4 d NaN False
4 5 NaN e False
检查 df1
和 df2
中缺少的 A1 键:
# A1 value missing in `df1`
>>> d3[df3.B1_1.isnull()]
A1 B1_1 B1_2 check
4 5 NaN e False
# A1 value missing in `df2`
>>> df3[df3.B1_2.isnull()]
A1 B1_1 B1_2 check
3 4 d NaN False
编辑 感谢@EdChum(所有 Pandas 知识的来源...)。
df3 = df1.merge(df2, how='outer', on='A1', suffixes=['_1', '_2'], indicator=True)
df3['check'] = df3.B1_1 == df3.B1_2
>>> df3
A1 B1_1 B1_2 _merge check
0 1 a a both True
1 2 b d both False
2 3 c c both True
3 4 d NaN left_only False
4 5 NaN e right_only False
关于 python : How to compare two data frames,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34161091/