2017-08-14 100 views
0

我有两个数据帧具有相同数量的列d1和d2。Python - 查找两个数据帧之间的行差异

注意:d1和d2可能有不同的行数。 注意:d1和d2可能不会被索引到每个数据帧中的同一行。

检查两个数据帧是否具有相同数据的最佳方法是什么?

我当前的解决方案包括将两个数据框附加在一起并删除任何匹配的行。

d_combined = d1.append(d2) 
d_discrepancy = d_combined.drop_duplicates(keep=False) 
print(d_discrepancy) 

我是新来的蟒蛇和熊猫图书馆。因为我将使用数百万行和8-10列的数据框,有没有更快更有效的方法来检查差异?它是否也可以显示由此产生的差异行来自哪个初始数据帧?

回答

1

设置

d1 = pd.DataFrame(dict(A=[1, 2, 3, 4])) 
d2 = pd.DataFrame(dict(A=[2, 3, 4, 5])) 

选项1
使用pd.merge。我将包含参数indicator=True以显示数据来自何处。

d1.merge(d2, how='outer', indicator=True) 

    A  _merge 
0 1 left_only 
1 2  both 
2 3  both 
3 4  both 
4 5 right_only 

如果它们具有相同的数据,我想到的是,_merge列将both的一切。所以我们可以用

d1.merge(d2, how='outer', indicator=True)._merge.eq('both').all() 

False 

在这种情况下,它返回False因此不是相同的数据。


选项2
使用drop_duplicates
你需要确保你从最初的dataframes先删除重复项。

d1.drop_duplicates().append(d2.drop_duplicates()) \ 
    .drop_duplicates(keep=False).empty