将宽 pandas 数据框转换/重塑为长/表格形式?

Convert/ reshape a wide pandas dataframe into long/ tabular form?

我有一个如下所示的数据框,以日期作为列,我想将其转换为表格(长)形式。

> PPPP = pd.DataFrame({'1/1/2001': [5,6,7,8,9],
>                      '1/1/2001':[45,46,47,48,49],
>                      '1/2/2001':[15,16,17,18,19],
>                      '1/3/2001':[25,26,27,28,29],
>                      'Category1':['aa','bb','cc','dd','ee'],
>                      'Category2':['XX','YY','ZZ','FF','KK']})

对于如何执行此操作的任何建议,我将不胜感激,因为它已成为我的噩梦。 我找到了很多关于如何用枢轴(从长到宽)做相反的信息,但似乎没有 material 反过来。 :(

我建议使用 melt:

df = PPPP.melt(['Category1','Category2'], value_name='a', var_name='b')
print (df)
   Category1 Category2         b   a
0         aa        XX  1/1/2001  45
1         bb        YY  1/1/2001  46
2         cc        ZZ  1/1/2001  47
3         dd        FF  1/1/2001  48
4         ee        KK  1/1/2001  49
5         aa        XX  1/2/2001  15
6         bb        YY  1/2/2001  16
7         cc        ZZ  1/2/2001  17
8         dd        FF  1/2/2001  18
9         ee        KK  1/2/2001  19
10        aa        XX  1/3/2001  25
11        bb        YY  1/3/2001  26
12        cc        ZZ  1/3/2001  27
13        dd        FF  1/3/2001  28
14        ee        KK  1/3/2001  29

使用stack

PPPP.set_index(['Category1','Category2']).stack()
Out[226]: 
Category1  Category2          
aa         XX         1/1/2001    45
                      1/2/2001    15
                      1/3/2001    25
bb         YY         1/1/2001    46
                      1/2/2001    16
                      1/3/2001    26
cc         ZZ         1/1/2001    47
                      1/2/2001    17
                      1/3/2001    27
dd         FF         1/1/2001    48
                      1/2/2001    18
                      1/3/2001    28
ee         KK         1/1/2001    49
                      1/2/2001    19
                      1/3/2001    29
dtype: int64