我想编写一个函数来比较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
答案 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)