比较两个python表是否相当于

时间:2017-10-05 05:07:22

标签: python dataframe

我想编写一个函数来比较2个表是否相等(相同的变量和观察值)例如,下面的2个表是等价的。对于第三个不是。

a   b   c
x   1   hat
y   2   cat
z   3   bat
w   4   rat

b   c   a
2   cat y
3   bat z
1   hat x
4   rat w

a   b   c
2   y   cat
3   z   bat
1   x   hat
4   w   rat

我决定通过比较最大值来解决这个问题。如何正确调出第一,第二等列并比较每一列的最大值?

def equal(A, B):
    A_names = sorted(A.columns)
    X = A[var_names].copy()
    B_names=sorted(B.columns)
    Y=B[var_names].copy()

    if A[0].max()==B[0].max() and A[1].max()==B[1].max():
        return True
    else:
        return False

这有一个Error KeyError:0

2 个答案:

答案 0 :(得分:1)

可以使用DataFrame对象的equals方法和一些DataFrames预处理来解决此任务:

def compare_dataframes(df1, df2):
    df1_cols = df1.columns.tolist()
    df2_cols = df2.columns.tolist()
    # column names and shapes should be equal for both dataframes 
    if set(df1_cols).symmetric_difference(set(df2_cols)) or (df1.shape != df2.shape):
        return False
    df1_sorted = df1.sort_values(by=cols).reset_index(drop=True)
    df2_sorted = df2.sort_values(by=cols).reset_index(drop=True)
    df2_sorted = df2_sorted[df1_sorted.columns]
    return df1_sorted.equals(df2_sorted)

答案 1 :(得分:0)

A_var_names = sorted(A.columns)
AA = A[A_var_names].copy() #COLUMN ORDER
AA.sort_values(by=A_var_names,inplace=True) #VALUE ORDER


B_var_names = sorted(B.columns)
BB = B[B_var_names].copy()
BB.sort_values(by=B_var_names,inplace=True)


return AA.equals(BB)