将时间序列旋转到面板中... python

时间:2018-10-19 08:10:29

标签: python dataframe time-series panel

我有一个数据帧,其中包含1932年2月29日至2018年7月31日每月观察的25个投资组合(ME1_BM1,ME1_BM2等)的时间序列。前四个观察结果如下:

                 ME1_BM1     ME1_BM2  ...
Date
1932-02-29       2.11875     1.28388
1932-03-31       2.18567     1.24275
...

“日期”列设置为索引。我需要为其他事情准备数据,所以我需要将数据转换为类似这样的内容:

ME1_BM1    1932-02-29    2.11875
           1932-03-31    2.18567
           ...
ME1_BM2    1932-02-29    1.28388
           1932-03-31    1.24275
           ...

无法使其正常工作。我试图堆叠数据框,但随后将日期作为索引,将投资组合作为第二个“变量”。我无处可去,因为我需要指定太多变量...

任何人都知道该怎么做吗?

亲切的问候,杰斯珀。

2 个答案:

答案 0 :(得分:0)

我认为您需要Series的{​​{1}}用unstack

MultiIndex

如果要3列s = df.unstack() print (s) Date ME1_BM1 1932-02-29 2.11875 1932-03-31 2.18567 ME1_BM2 1932-02-29 1.28388 1932-03-31 1.24275 dtype: float64 添加reset_index

DataFrame

答案 1 :(得分:0)

尽管先前的答案更为优雅-您可以执行以下操作:

df = df.reset_index() # so date is not index anymore

融合投资组合:

df2 = pd.melt(df, id_vars=["Date"], value_vars=['ME1_BM1','ME1_BM2'])

应用分组依据:

df2.groupby(["variable", "Date"])["value"].max()

显然,您可以更改列名称,使其看起来更整洁。

您也可以只收集所有列  df.columns

删除日期,然后不需要输入太多。