我有一个时序如下的csv文件/数据框:
IDX_A IDX_B 1/1/20 1/2/20 1/3/20
A 1 A1_0 A1_1 A1_2
A 2 A2_0 A2_1 A2_2
B 3 B3_0 B3_1 B3_2
B 4 B4_0 B3_1 B3_2
我想转换为第一级作为DatetimeIndex的多索引:
F1
Date IDX_A IDX_B
1/1/20 A 1 A1_0
2 A2_0
B 3 B3_0
4 B4_0
1/2/20 A 1 A1_1
2 A2_1
B 3 B3_1
4 B3_1
1/3/20 A 1 A1_2
2 A2_2
B 3 B3_2
4 B3_2
我认为以前已经有人问过这个问题,但是我只能找到有关单个索引朝另一个方向发展的信息。我将附加其他功能列并在现有代码中使用,因此这对我来说是最佳格式,尤其是考虑到DatetimeIndex对于时间序列有意义。
答案 0 :(得分:1)
我的方法:
(df.set_index(['IDX_A','IDX_B'])
.rename_axis(columns='Date')
.stack()
.reorder_levels((2,0,1))
.sort_index()
.to_frame(name='F1')
)
或使用melt
:
(df.melt(['IDX_A','IDX_B'], var_name='Date',value_name='F1')
.set_index(['Date','IDX_A','IDX_B'])
)
输出:
F1
Date IDX_A IDX_B
1/1/20 A 1 A1_0
2 A2_0
B 3 B3_0
4 B4_0
1/2/20 A 1 A1_1
2 A2_1
B 3 B3_1
4 B3_1
1/3/20 A 1 A1_2
2 A2_2
B 3 B3_2
4 B3_2