比较两个数据帧并并排输出它们的差异

我正试图强调两个数据帧之间到底发生了什么变化

假设我有两个Python数据帧:

“学生名册1月1日”:
id名称得分为已记录注释
是的,他上课迟到了
112尼克1.11假刻度
113佐伊4.12对
“学生名册1月2日”:
id名称得分为已记录注释
是的,他上课迟到了
112尼克1.21假刻度
113佐伊4.12假度假

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

  1. 标识已更改的行(可以是int、float、boolean、string)
  2. 输出具有相同、旧和新值的行(理想情况下为HTML表),以便使用者可以清楚地看到两个数据帧之间的更改:

    “学生名册差异1月1日-2月2日”:
    id名称得分为已记录注释
    112尼克当时是1.11,现在是1.21
    113佐伊4.12是真的|现在是假的|现在是在度假
    

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

第一部分类似于Constantine,您可以得到行为空的布尔值*:

[21]on

:ne=(df1!=df2)。任何(1)
In[22]:ne
Output[22]:
0错误
1正确
2正确
数据类型:bool

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

[23]on

:ne_stacked=(df1!=df2).stack()
At[24]on:已更改=ne_堆叠[ne_堆叠]
At[25]on:changed.index.names=['id','col']
At[26]on:已更改
Output[26]:
身份证
1分正确
2.我认为是真的
评论正确
数据类型:bool

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

[27]on

:差异位置=np.其中(df1!=df2)
At[28]on:更改自=df1。值[差异位置]
At[29]on:更改为=df2。值[差异位置]
At[30]on:pd.DataFrame({'from':changed_from'to':changed_to},index=changed.index)
Output[30]:
从到
身份证
1分1.11分1.21分
2.我查对了,错了
对假期不予评论

*注意:df1df2在这里共享相同的索引非常重要。为了克服这种歧义,您可以确保只使用df1.index&查看共享标签;df2.index,但我想我会把它作为练习

发表评论