逐行比较不同df的变化return

Compare different df's row by row and return changes

每个月我都会收集包含员工详细信息的数据,并将其存储在我们的数据库中。 我需要找到一个解决方案,将上个月存储的数据与收到的数据进行比较,对于任何列发生变化的每一行,它都会 return 到一个新的数据帧中。

我还需要以某种方式知道这个新 returned 数据框的每一行中的哪些列在进行这种比较时发生了变化。

还有一些重要的细节要提一下:

所以,例如,我们会有这个数据框(它只是真实数据框的一部分,因为它有 63 列):

df1:
Index      Department      Salary      Manager      Email      Start_Date
1          IT              6000.00     Jack         ax@i.com   01-01-2021
2          HR              7000        O'Donnel     ay@i.com   
3          MKT             00       Maria        d          30-06-2021
4          I'T             8000        Peter        az@i.com   14-07-2021


df2:
Index      Department      Salary      Manager      Email      Start_Date
1          IT              6000.00     Jack         ax@i.com   01-01-2021
2          HR              7000        O'Donnel     ay@i.com   01-01-2021
3          MKT             7600        Maria        dy@i.com   30-06-2021
4          IT              8000        Peter        az@i.com   14-07-2021
5          IT              9000        John                    NOT PROVIDED
6          IT              9900        John                    NOT PROVIDED

df3:
Index      Department      Salary      Manager      Email      Start_Date
2          HR              7000        O'Donnel     ay@i.com   01-01-2021
3          MKT             7600        Maria        dy@i.com   30-06-2021
4          IT              8000        Peter        az@i.com   14-07-2021

**本例中的区别是:

进行此比较的最佳方法是什么? 我不确定是否有一个简单的解决方案来理解每个字段中发生的变化,但是 return 使用至少有 1 个更改的行对数据框进行处理会有所帮助。

感谢支持!

我认为比较可以解决问题:https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.compare.html

但首先您需要通过索引对齐新旧数据帧之间的行:

new_df_to_compare=new_df.loc[old_df.index]

当数据类型不匹配时。您还需要对齐它们:

new_df_to_compare = new_df_to_compare.astype(old_df.dtypes.to_dict())

然后比较应该像这样工作:

difference_df = old_df.compare(new_df_to_compare)