Python 使用不同的';年份';列转换为连续时间序列

Python 使用不同的';年份';列转换为连续时间序列,python,pandas,time-series,Python,Pandas,Time Series,可以这样转换熊猫上的数据帧: 进入一个时间序列,其中每年都落后于上一个这可能就是df.unstack(level=1)的含义 np.random.seed(111) # reproducibility df = pd.DataFrame( data={ "2009": np.random.randn(12), "2010": np.random.randn(12), "2011"

可以这样转换熊猫上的数据帧:


进入一个时间序列,其中每年都落后于上一个

这可能就是df.unstack(level=1)的含义

np.random.seed(111)  # reproducibility
df = pd.DataFrame(
    data={
        "2009": np.random.randn(12),
        "2010": np.random.randn(12),
        "2011": np.random.randn(12),
    },
    index=range(1, 13)
)

print(df)
Out[45]: 
        2009      2010      2011
1  -1.133838 -1.440585  0.570594
2   0.384319  0.773703  0.915420
3   1.496554 -1.027967 -1.669341
4  -0.355382 -0.090986  0.482714
5  -0.787534  0.492003 -0.310473
6  -0.459439  0.424672  2.394690
7  -0.059169  1.283049  1.550931
8  -0.354174  0.315986 -0.646465
9  -0.735523 -0.408082 -0.928937
10 -1.183940 -0.067948 -1.654976
11  0.238894 -0.952427  0.350193
12 -0.589920 -0.110677 -0.141757

df_out = df.unstack(1).reset_index()
df_out.columns = ["year", "month", "value"]

print(df_out)
Out[46]: 
    year  month     value
0   2009      1 -1.133838
1   2009      2  0.384319
2   2009      3  1.496554
3   2009      4 -0.355382
4   2009      5 -0.787534
5   2009      6 -0.459439
6   2009      7 -0.059169
7   2009      8 -0.354174
8   2009      9 -0.735523
9   2009     10 -1.183940
10  2009     11  0.238894
11  2009     12 -0.589920
12  2010      1 -1.440585
13  2010      2  0.773703
14  2010      3 -1.027967
15  2010      4 -0.090986
16  2010      5  0.492003
17  2010      6  0.424672
18  2010      7  1.283049
19  2010      8  0.315986
20  2010      9 -0.408082
21  2010     10 -0.067948
22  2010     11 -0.952427
23  2010     12 -0.110677
24  2011      1  0.570594
25  2011      2  0.915420
26  2011      3 -1.669341
27  2011      4  0.482714
28  2011      5 -0.310473
29  2011      6  2.394690
30  2011      7  1.550931
31  2011      8 -0.646465
32  2011      9 -0.928937
33  2011     10 -1.654976
34  2011     11  0.350193
35  2011     12 -0.141757

也许
df.stack()
?感谢您的快速响应,这正是我要找的