Pandas 熊猫:使用DatetimeIndex将timeseries列转换为多索引

Pandas 熊猫:使用DatetimeIndex将timeseries列转换为多索引,pandas,time-series,multi-index,reindex,datetimeindex,Pandas,Time Series,Multi Index,Reindex,Datetimeindex,我有一个时间序列的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的多索引:

我有一个时间序列的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对时间序列有意义。

我的方法:

(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

谢谢,熔化工作完美,这和我更复杂的真实数据!我要提醒所有来这里确保csv加载了parse_dates=True的人,当我第一次尝试你的答案时,我已经忘记了这一点。