首页 > 解决方案 > 将数据集拆分为年度时间序列

问题描述

我有一个数据集,它为我提供了一个唯一标识符和不同的列,其中包含每年的值。它看起来如下:

ID 价值90 价值91 价值92 价值93 .. 价值16
A B C D 1 2 3 4 .. 5
EFGH 6 7 8 9 .. 10
IJKL 11 12 13 14 .. 15
df = pd.Dataframe({'ID':[ABCD, EFGH, IJKL], 'value90':[1, 6, 11], 'value91':[2,7,12], 'value92':[3,8,13], 'value93':[4,9,14], 'value16':[5,10,15]}

我正在寻找以下输出:

ID 价值
1990 美国广播公司 1
1991 美国广播公司 2
1992 美国广播公司 3
... ...... ...
2016 年 美国广播公司 5
... ...... ...
2016 年 IJKL 15

我正在使用 pandas,但不确定如何生成我正在寻找的最终输出。谢谢!

标签: pythonpandas

解决方案


您可以使用pd.melt来获得大部分路径,然后排序:

import pandas as pd

df = pd.DataFrame({'ID':['ABCD', 'EFGH', 'IJKL'], 'value90':[1, 6, 11], 'value91':[2,7,12], 'value92':[3,8,13], 'value93':[4,9,14], 'value16':[5,10,15]})

print(df)

df2 = pd.melt(df, id_vars=["ID"],var_name="Year", value_name="Value")
df2 = df2.sort_values(by=['ID'])
df2 = df2.filter(["Year","ID","Value"])

print(df2)

[输出]

     ID  value90  value91  value92  value93  value16
0  ABCD        1        2        3        4        5
1  EFGH        6        7        8        9       10
2  IJKL       11       12       13       14       15



       Year    ID  Value
0   value90  ABCD      1
3   value91  ABCD      2
6   value92  ABCD      3
9   value93  ABCD      4
12  value16  ABCD      5
1   value90  EFGH      6
4   value91  EFGH      7
7   value92  EFGH      8
10  value93  EFGH      9
13  value16  EFGH     10
2   value90  IJKL     11
5   value91  IJKL     12
8   value92  IJKL     13
11  value93  IJKL     14
14  value16  IJKL     15

推荐阅读