【问题标题】:Merging time series data so that column values are fitted into dictionaries合并时间序列数据,以便将列值拟合到字典中
【发布时间】:2026-01-15 06:15:02
【问题描述】:

我有两个时间序列数据框,它们在相同的时间内跟踪相同的某些国家,但它们为每次观察跟踪的变量代表了截然不同的事物。比如第一个数据框是这样的:

跟踪变量“A”:

Country 01/01/2020 01/02/2020 01/03/2020 ... 04/25/2021
AFG 0 0 1 ... 5000
CHN 0 20 50 ... 0
USA 1 2 4 ... 10000

第二个数据框跟踪不同的变量“B”,如下所示:

Country 01/01/2020 01/02/2020 01/03/2020 ... 04/25/2021
AFG 10 10 0 ... 0
CHN 1 1 1 ... 20
USA 0 7 10 ... 543

我想合并这两个数据框,以便生成以下内容({} 表示内部字典):

Country 01/01/2020 01/02/2020 01/03/2020 ... 04/25/2021
AFG (A: 0, B: 10) (A: 0, B: 10) (A: 1, B: 0) ... (A: 5000, B: 0)
CHN (A: 0, B: 1) (A: 20, B: 1) (A: 50, B: 1) ... (A: 0, B: 20)
USA (A: 1, B: 0) (A: 2, B: 7) (A: 4, B: 10) ... (A: 10000, B: 543)

我在 Pandas 中是否缺少命令,或者是否有某种方法可以执行此操作?谢谢你能给我的任何帮助。

【问题讨论】:

    标签: python pandas join merge time-series


    【解决方案1】:

    代码

    pd.concat([df1, df2]).groupby('Country').agg(list).applymap(
    lambda x: dict(zip(['A','B'], [*x]))).reset_index()
    

    输出

        Country 01/01/2020          01/02/2020  01/03/2020  04/25/2021
    0   AFG    {'A': 0, 'B': 10}    {'A': 0, 'B': 10}   {'A': 1, 'B': 0}    {'A': 5000, 'B': 0}
    1   CHN    {'A': 0, 'B': 1}     {'A': 20, 'B': 1}   {'A': 50, 'B': 1}   {'A': 0, 'B': 20}
    2   USA    {'A': 1, 'B': 0}     {'A': 2, 'B': 7}    {'A': 4, 'B': 10}   {'A': 10000, 'B': 543}
    

    说明

    我们首先使用pd.concat 连接两个dfs。

    然后我们使用groupby按国家/地区对生成的df进行分组。

    在分组 df 上使用agg 聚合以创建基于Country 的项目列表。

    然后我们映射列表项以使用applymap 创建一个以A and B 作为键的dict

    【讨论】: