2017-04-04 25 views
1

我想比較兩個pd.dataframes平等:評估排序大熊貓dataframes的平等並不像預期的那樣

foo = pd.DataFrame([['between', 1.5], ['between', 2], 
        ['between', 2.0], ['within', 2.0]], 
        columns=['Group', 'Distance']) 

bar = pd.DataFrame([['between', 2], ['between', 1.5], 
        ['within', 2.0], ['between', 2.0]], 
        columns=['Group', 'Distance']) 

至於我而言這兩個dataframes是相同的,但是我知道大熊貓不同意因爲它們的順序不一樣。我的想法是,我可以進行排序,然後重新索引

foo = foo.sort_values('Distance').reset_index(drop=True) 
bar = bar.sort_values('Distance').reset_index(drop=True) 

熊貓排序給出因爲dataframes的初始排序的不同的結果。而事實上,他們不評價爲等同:

foo.equals(bar) 
False 

我能先排序上Group,然後Distance這將返回True,但是在處理較大dataframes我很擔心有明確定義每次排序規則。有沒有更好的方法來比較兩個不同順序的數據框?

回答

2

這種方式可以讓他們評估爲True

foo.sort_values(foo.columns.values.tolist()).reset_index(drop=True).equals(bar.sort_values(foo.columns.values.tolist()).reset_index(drop=True)) 

或者

foo = foo.sort_values(foo.columns.values.tolist()).reset_index(drop=True) 
bar = bar.sort_values(foo.columns.values.tolist()).reset_index(drop=True) 
foo.equals(bar) 
True 
+0

替代解決方案:'(foo.sort_values([ '集團', '距離'])值= = bar.sort_values(['Group','Distance'])。values).all()' – MaxU