我有一个数据帧,其中包含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
...
无法使其正常工作。我试图堆叠数据框,但随后将日期作为索引,将投资组合作为第二个“变量”。我无处可去,因为我需要指定太多变量...
任何人都知道该怎么做吗?
亲切的问候,杰斯珀。
答案 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
删除日期,然后不需要输入太多。