检查两个数据帧的相等性

时间:2017-02-13 07:30:55

标签: python-3.x pandas dataframe

检查两个数据帧是否相等的Pythonic方法是什么?

我目前正在做的事情:

  1. 使用pandas.DataFrame.sort_values()
  2. 对具有唯一值的列对数据框进行排序
  3. 使用pandas.DataFrame.reset_index()
  4. 对数据框进行排序后重置索引
  5. 使用pandas.DataFrame.sort_index()
  6. 按行和列对数据框索引进行排序
  7. 然后将两个数据框相互比较并使用pandas.DataFrame.all()
  8. 示例代码:

    (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'?

2 个答案:

答案 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)

新答案

考虑数据框d1d2

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

旧答案

考虑数据框d1d2

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