比较两个DataFrame并并排输出它们的差异

天空:

我试图突出显示两个数据框之间到底发生了什么变化。

假设我有两个Python Pandas数据框:

"StudentRoster Jan-1":
id   Name   score                    isEnrolled           Comment
111  Jack   2.17                     True                 He was late to class
112  Nick   1.11                     False                Graduated
113  Zoe    4.12                     True       

"StudentRoster Jan-2":
id   Name   score                    isEnrolled           Comment
111  Jack   2.17                     True                 He was late to class
112  Nick   1.21                     False                Graduated
113  Zoe    4.12                     False                On vacation

我的目标是输出一个HTML表:

  1. 标识已更改的行(可以是int,float,boolean,string)
  2. 输出具有相同,OLD和NEW值的行(理想情况下,将其输出到HTML表中),以便使用者可以清楚地看到两个数据框之间的变化:

    "StudentRoster Difference Jan-1 - Jan-2":  
    id   Name   score                    isEnrolled           Comment
    112  Nick   was 1.11| now 1.21       False                Graduated
    113  Zoe    4.12                     was True | now False was "" | now   "On   vacation"
    

我想我可以逐行和逐列进行比较,但是有没有更简单的方法?

安迪·海登(Andy Hayden):

第一部分类似于君士坦丁,您可以获取哪些行为空*的布尔值:

In [21]: ne = (df1 != df2).any(1)

In [22]: ne
Out[22]:
0    False
1     True
2     True
dtype: bool

然后,我们可以查看哪些条目已更改:

In [23]: ne_stacked = (df1 != df2).stack()

In [24]: changed = ne_stacked[ne_stacked]

In [25]: changed.index.names = ['id', 'col']

In [26]: changed
Out[26]:
id  col
1   score         True
2   isEnrolled    True
    Comment       True
dtype: bool

在这里,第一个条目是索引,第二个条目是已更改的列。

In [27]: difference_locations = np.where(df1 != df2)

In [28]: changed_from = df1.values[difference_locations]

In [29]: changed_to = df2.values[difference_locations]

In [30]: pd.DataFrame({'from': changed_from, 'to': changed_to}, index=changed.index)
Out[30]:
               from           to
id col
1  score       1.11         1.21
2  isEnrolled  True        False
   Comment     None  On vacation

*注:这是非常重要的df1,并df2在这里分享相同的索引。为了克服这种歧义,您可以确保仅使用来查看共享标签df1.index & df2.index,但我想将其保留为练习。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

比较两个列表并获得差异

比较两个DataFrame并并排输出它们的差异

比较两个电子表格并使用Google App脚本输出差异

合并并排序Javascript中的两个对象数组

比较两个文件并应用差异

比较Pandas中的两个DataFrame

比较字典和输出差异的两个列表

比较两列以匹配值并并排对齐

jq比较两个文件并以文本格式输出差异

比较两个DataFrame并遍历它们(以测试条件)

是否存在比较两个DataFrame并输出不同元素的功能?

并排对齐两个元素并迫使它们保持水平

比较两个日期而不考虑它们的时区差异的最佳方法?

在KSH和输出的差异比较两个数组

并排比较两个以上包含数值的文件

我想比较两个列表并打印列表一的差异输出

比较两个文件并输出匹配

尝试比较两个csv文件并将差异写为输出

Python difflib 比较两个 csv 文件并突出显示 HTML 输出中的世界级差异

比较两个目录以产生输出

如何并排比较两个mysql表

如何比较两个 csv 文件中的特定列并将差异输出到第三个文件

Python:并排比较两个列表

比较两个文件和两个文件的输出差异(包括行号和内容)

比较两个文件的两列并计算差异

当我比较两个文件以报告它们之间的差异时出现意外结果

比较两个 DataFrame 并输出具有不同索引的新 DataFrame

比较两个 DataFrame 并输出具有不同索引的新 DataFrame

比较两个 List 并获得差异