pandas 组合键上的数据框 Concat/Upsert

pandas Dataframe Concat/Upsert on a Combination Key

假设我有以下数据集

ID | Name | balance | Year
112 Johnstown 1 2020
321 Oregon 4 2020
121 Jackson 4 2020

和以下传入数据集

112 Johnstown 1 2021
321 Oregon 6 2020
121 Jackson 4 2020

我想做的是结合这两个数据集,同时保留季节性的概念。基本上,如果记录有除年份以外的任何字段发生变化,则更新该记录。但是,如果记录有年份更改,则重新记录。

所以在我们的例子中,结果数据集看起来像这样

112 Johnstown 1 2021
112 Johnstown 1 2020
321 Oregon 6 2020
121 Jackson 4 2020

这本质上是一个 upsert 操作,我认为它是对 ID 和 season 组合键的 upsert。基本上,如果 ID 和季节相同,则更新现有记录,如果不同,则添加新记录。也就是说

  1. 如果记录完全相同则什么也不做
  2. 如果记录不同但 year/id 相同则记录 来自新数据集

3.If一条记录不同,year/id是 不同创造新纪录

数据帧可以吗?如果没有,我是否应该考虑另一种结构来实现它?我们的数据集只是 parquet 文件,因此我们可以随意操作它们

这是预期的输出吗?根据您的

Basically, if the ID and season are the same update the existing record, and if they're different add a new record.

我们连接两个数据帧,按 IDYear 分组,并在每个组中保留最后一个(因此来自 df2)元素。

>>> pd.concat([df1, df2]).groupby(["ID", "Year"], as_index=False).last()
    ID  Year       Name balance
0  112  2020  Johnstown    1
1  112  2021  Johnstown    1
2  121  2020    Jackson    4
3  321  2020     Oregon    6