检查两个数据帧是否相等的Pythonic方法是什么?
我目前正在做的事情:
示例代码:
(df1.sort_values(['Symbol']).reset_index(drop=True).sort_index(axis=0).sort_index(axis=1) ==
df2.sort_values(['Symbol']).reset_index(drop=True).sort_index(axis=0).sort_index(axis=1)).all().all()
这很有效,但我觉得应该有更好的方法来做同样的事情,有没有' Pythonic Way'?
答案 0 :(得分:3)
我认为简化为merge
- 默认情况下,所有列都加入了inner
和最后equals
:
pd.merge(df1, df2).equals(df1)
样品:
df1 = pd.DataFrame({'A':[1,2,3],
'B':[4,5,6],
'C':[7,8,9]})
print (df1)
A B C
0 1 4 7
1 2 5 8
2 3 6 9
df2 = pd.DataFrame({'A':[1,3,2],
'B':[4,6,5],
'C':[7,9,8]})[['C','B','A']]
print (df2)
C B A
0 7 4 1
1 9 6 3
2 8 5 2
print (pd.merge(df1, df2))
A B C
0 1 4 7
1 2 5 8
2 3 6 9
print (pd.merge(df1, df2).equals(df1))
True
答案 1 :(得分:1)
考虑数据框d1
和d2
d1 = pd.DataFrame([
[1, 2],
[3, 4]
], ['A', 'B'], ['X', 'Y'])
d2 = pd.DataFrame([
[4, 3],
[2, 1]
], ['B', 'A'], ['Y', 'X'])
(d1.reindex(columns=d2.columns).values[:, None]
== d2.values).all(-1).any(-1).all()
True
考虑数据框d1
和d2
d1 = pd.DataFrame([
[1, 2],
[3, 4]
], ['A', 'B'], ['X', 'Y'])
d2 = pd.DataFrame([
[4, 3],
[2, 1]
], ['B', 'A'], ['Y', 'X'])
您想要像另一个那样重新索引,并使用pd.DataFrame.equals
d1.reindex_like(d2).equals(d2)
True