2017-08-14 71 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