当两个df1测试失败时,我想知道这个值在df2中是什么样子的,以及这个值在df2中是怎样的。
这是我能得到的最具体的输出:
# more specific cell by cell test
Assertion_df = Output_Test_Cases_df.merge(Correct_Test_Cases_df).eq(Output_Test_Cases_df)
print(Assertion_df.iloc[:, [1, 2, 3]]) DBN AI Code Active AI
0 True True True
1 False True True
2 True True True
3 True True True
4 True False True
5 True True True
6 True True True
7 True True True不过,我想要的是
DBN AI Code Active AI
0 True True True
1 12X000 in df1, 12X111 in df 2 True True
2 True True True
3 True True True
4 True 100 in df1, 200 in df2 True
5 True True True
6 True True True
7 True True True如能在功能上与上述内容相媲美,将不胜感激。
发布于 2019-07-26 17:05:53
你可以试试
dfBool = (Correct_Test_Cases_df != Output_Test_Cases_df).stack() # Create Frame of comparison booleans
dfDiff = pd.concat([Correct_Test_Cases_df.stack()[dfBool],
Output_Test_Cases_df.stack()[dfBool]], axis=1)
dfDiff.columns=["Old", "New"]
print(dfDiff)发布于 2019-07-26 18:05:00
在使用mask只选择不等单元格之后,您可以编写自己的函数。我把它仅仅用于可视化,用df1.mask(s)来处理单个值要容易得多
代码:
def my_agg(x):
if x.isnull().all():
return True
else:
return list(zip(x, x.index.get_level_values(0)))
s = df1 == df2
(pd.concat([df1.mask(s), df2.mask(s)], keys=['df1', 'df2'])
.groupby(level=1).agg(my_agg))
# A B C
#0 True True True
#1 True True True
#2 [(c, df1), (b, df2)] True [(3.0, df1), (1.0, df2)]
#3 True True True
#4 True [(E, df1), (X, df2)] True样本数据:
import pandas as pd
df1 = pd.DataFrame({'A': list('abcde'),
'B': list('ABCDE'),
'C': [1,2,3,4,5]})
df2 = pd.DataFrame({'A': list('abbde'),
'B': list('ABCDX'),
'C': [1,2,1,4,5]})https://stackoverflow.com/questions/57224294
复制相似问题