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 和季节相同,则更新现有记录,如果不同,则添加新记录。也就是说
- 如果记录完全相同则什么也不做
- 如果记录不同但 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.
我们连接两个数据帧,按 ID
和 Year
分组,并在每个组中保留最后一个(因此来自 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
假设我有以下数据集
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 和季节相同,则更新现有记录,如果不同,则添加新记录。也就是说
- 如果记录完全相同则什么也不做
- 如果记录不同但 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.
我们连接两个数据帧,按 ID
和 Year
分组,并在每个组中保留最后一个(因此来自 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