合并时间序列数据,以便将列值拟合到字典中
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 DataFrame 根据另一列中时间戳值的最小/最大条件更新列值