将大熊猫数据框转换/重塑为长/表格形式?

时间:2018-05-02 15:34:18

标签: pandas dataframe reshape melt

我有一个如下数据框,其中Dates为列,并希望将其转换为表格(长)形式。

> 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']})

我非常感谢有关如何做到这一点的任何建议,因为它已成为我的噩梦。 我发现很多关于如何与枢轴(从长到宽)做相反的信息,但似乎没有相反的材料。 :(

2 个答案:

答案 0 :(得分:3)

我建议使用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

答案 1 :(得分:3)

使用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