2017-04-04 50 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