首页 > 解决方案 > 如何将时间序列中的每个值作为具有唯一 ID 的列

问题描述

我有一个唯一的 ID 和时间序列数据。时间序列数据包含 3 个宏变量。我想构建数据框,其中列是 date ,它们是相同的。以下是初始和预期输出的示例


在此处输入图像描述


在此处输入图像描述

ID的长度在这里并不重要

标签: pythonpandas

解决方案


设置

重新创建 OP 的数据框

dat = [[3, 4, 1], [4, 5, 3]]
idx = [2017, 2018]
col = ['A', 'B', 'C']
df = pd.DataFrame(dat, idx, col).rename_axis('time')

pd.concat

我说唱enumeratedict哪里enumerate开始1以匹配ID从开始的OP1

new = pd.concat(dict(enumerate([df] * 3, 1)), names=['ID']).unstack()

new.columns = [f'{x}{y}' for x, y in new.columns]

new

    A2017  A2018  B2017  B2018  C2017  C2018
ID                                          
1       3      4      4      5      1      3
2       3      4      4      5      1      3
3       3      4      4      5      1      3

细节

查看连接的数据框是什么样的

pd.concat(dict(enumerate([df] * 3, 1)), names=['ID'])

         A  B  C
ID time         
1  2017  3  4  1
   2018  4  5  3
2  2017  3  4  1
   2018  4  5  3
3  2017  3  4  1
   2018  4  5  3

如果我们拆开它

        A         B         C     
time 2017 2018 2017 2018 2017 2018
ID                                
1       3    4    4    5    1    3
2       3    4    4    5    1    3
3       3    4    4    5    1    3

剩下要做的就是将列级别粉碎在一起,您可以在上面看到我是如何做到的。


推荐阅读