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