首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更具体的Pandas测试两个数据文件之间的相等性

更具体的Pandas测试两个数据文件之间的相等性
EN

Stack Overflow用户
提问于 2019-07-26 16:58:39
回答 2查看 55关注 0票数 0

当两个df1测试失败时,我想知道这个值在df2中是什么样子的,以及这个值在df2中是怎样的。

这是我能得到的最具体的输出:

代码语言:javascript
复制
# 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]])
代码语言:javascript
复制
    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

不过,我想要的是

代码语言:javascript
复制
    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

如能在功能上与上述内容相媲美,将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-26 17:05:53

你可以试试

代码语言:javascript
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2019-07-26 18:05:00

在使用mask只选择不等单元格之后,您可以编写自己的函数。我把它仅仅用于可视化,用df1.mask(s)来处理单个值要容易得多

代码:

代码语言:javascript
复制
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

样本数据:

代码语言:javascript
复制
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]})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57224294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档