合并时间序列数据,以便将列值拟合到字典中

Posted

技术标签:

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

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

跟踪变量“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 中是否缺少命令,或者是否有某种方法可以执行此操作?谢谢你能给我的任何帮助。

【问题讨论】:

【参考方案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

【讨论】:

以上是关于合并时间序列数据,以便将列值拟合到字典中的主要内容,如果未能解决你的问题,请参考以下文章

将列字典从不同的数据帧转换为数据帧:pyspark

PySpark DataFrame 根据另一列中时间戳值的最小/最大条件更新列值

将数据加载到 SQL 表中时处理特殊字符和转义字符

R中时间序列数据的拆分应用聚合

Python:如何在比较其他列时将列值填充到另一个数据框中的新列?

Pandas - 将列值组合到新列中的列表中