Python 如何将时间序列的每个值作为具有唯一ID的列

Python 如何将时间序列的每个值作为具有唯一ID的列,python,pandas,Python,Pandas,我有一个唯一的ID和时间序列数据。时间序列数据包含3个宏变量。 我想构建数据框,其中的列是date,它们是相同的。以下是初始输出和预期输出的示例 ID的长度在此处不重要设置 重新创建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 I rapenumerate

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



ID的长度在此处不重要

设置 重新创建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
I rap
enumerate
dict
中,其中
enumerate
1开始,以匹配从
1开始的OP的
ID

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
剩下的唯一一件事就是将列级别粉碎在一起,您可以看到我是如何在上面完成的。

Setup 重新创建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
I rap
enumerate
dict
中,其中
enumerate
1开始,以匹配从
1开始的OP的
ID

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

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

请将数据以文本(打印数据框)而不是图像的形式发布。ID来自何处?我认为这只是重复的数据,因为OP说“ID的长度在这里不重要”@alollz请将数据以文本(打印数据框)的形式发布而不是图像。ID来自哪里?我认为这只是重复的数据,正如OP所说的“ID的长度在这里并不重要”@ALollz