我有一个函数来比较两个dataframes,如果等于返回True
,并False
如果列名和观察是不相等的。通过他们的列名比较dataframes和意见
def table_equal(A, B):
var_names = sorted(A.columns)
Y = A[var_names].copy()
Y.sort_values(by=var_names, inplace=True)
Y.set_index([list(range(0,len(Y)))], inplace=True)
var_names2 = sorted(B.columns)
Z = B[var_names2].copy()
Z.sort_values(by=var_names, inplace=True)
Z.set_index([list(range(0,len(Y)))], inplace=True)
if Y.equals(Z):
return True
else:
return False
比方说,我有一个原始表(A),我想比较其他表。
a b c
x 1 hat
y 2 cat
z 3 bat
w 4 rat
我的函数适用于表B的几乎所有排列,除了下表,这是给我True
而不是False
为:
a c b
x 1 hat
y 2 cat
z 3 bat
w 4 rat
有一些调整,我有做我的码?
后续问题:
我想下面的两张桌子是真正的在同一变量相同的看法。
a b c
0 x 1 hat
1 y 2 cat
2 z 3 bat
3 w 4 rat
c b a
6 rat 4 w
3 hat 1 x
1 bat 3 z
9 cat 2 y
从piRSquared的解决方案,代码工作,但我怎么忽略其是在每个表完全一样的,只要意见是相同的行?
对于失败的表比较,你有没有试过打印出Y'的'计算值和'Z',看看它们是什么,你认为他们应该是什么?似乎可以采取同样的基本方法来验证哪些中间步骤不按您认为的方式工作(最终导致其中一个不是您想象的)。 – martineau
'Z.sort_values(by = var_names,inplace = True)'是'Z.sort_values(by = var_names2,inplace = True)'? – martineau
尝试:'如果Y.reset_index(drop = True).equals(Z.reset_index(drop = True))'因为排序不会改变索引,并且通过索引完成比较。 –