合并两个数据框并建立带有日期更新的“最新”行

问题描述

我的目标是合并两个数据帧,prev_dfnew_df。行在 statement_uuid 上匹配的地方:

  1. 如果值没有改变,只需更新前一行的 date_confirmed删除新行
  2. 如果值不同,将上一行设置为 latest=False添加新行

注意:为了比较匹配的statement_uuid,应忽略以下列:[statement_uuid,date_created,date_confirmed,latest]

更高级别的目标是生成一个数据框,该数据框记录非排除列值中的差异 statement_uuid-wise。

示例prev_df

|    | statement_uuid   | foo   |   bar | date_created        | date_confirmed      | latest   |
|---:|:-----------------|:------|------:|:--------------------|:--------------------|:---------|
|  0 | s1               | a     |    42 | 2021-01-01 00:00:00 | 2021-01-10 00:00:00 | True     |
|  1 | s2               | b     |    42 | 2021-01-01 00:00:00 | 2021-01-10 00:00:00 | True     |
|  2 | s3               | c     |    42 | 2021-01-10 00:00:00 | 2021-01-10 00:00:00 | True     |

示例new_df

|    | statement_uuid   | foo   |   bar | date_created        | date_confirmed      | latest   |
|---:|:-----------------|:------|------:|:--------------------|:--------------------|:---------|
|  0 | s2               | X     |    42 | 2021-01-20 00:00:00 | 2021-01-20 00:00:00 | None     |
|  1 | s3               | c     |    42 | 2021-01-20 00:00:00 | 2021-01-20 00:00:00 | None     |
|  2 | s4               | Y     |    42 | 2021-01-20 00:00:00 | 2021-01-20 00:00:00 | None     |
  • 此数据框中不存在第 s1
  • foo
  • s2 值已从 b --> X
  • s4 行是全新的

最后,期望的输出 df:

|    | statement_uuid   | foo   |   bar | date_created        | date_confirmed      | latest   |
|---:|:-----------------|:------|------:|:--------------------|:--------------------|:---------|
|  0 | s1               | a     |    42 | 2021-01-01 00:00:00 | 2021-01-10 00:00:00 | True     |
|  1 | s2               | b     |    42 | 2021-01-01 00:00:00 | 2021-01-10 00:00:00 | False    |
|  2 | s2               | X     |    42 | 2021-01-20 00:00:00 | 2021-01-20 00:00:00 | True     |
|  3 | s3               | c     |    42 | 2021-01-10 00:00:00 | 2021-01-20 00:00:00 | True     |
|  4 | s4               | Y     |    42 | 2021-01-20 00:00:00 | 2021-01-20 00:00:00 | True     |
  • statement_uuid=s2 现在有 两行
    • 以前的 foo=b 值,现在是 latest=False
    • foo=X 的新值,现在是 latest=True
  • date_confirmed 已针对新行和已确认行进行了更新,但对于不再是最新行的 s2 进行了

更新:已经找到了一个可行的解决方案,但仍然感谢对改进或其他方法的任何见解。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)