重塑多索引pandas数据帧

时间:2017-07-10 15:15:08

标签: python pandas multi-index

我有一个看起来像这样的多索引熊猫数据框

 ID            I                   II                  III
 METRIC        a    b    c    d    a    b    c    d    a    b    c    d
 2015-08-01    0    1    2    3    20   21   22   23   40   41   42   43
 2015-08-02    4    5    6    7    24   25   26   27   44   45   46   47
 2015-08-03    8    9    10   11   28   29   30   31   48   49   50   51

它按日期(2015-08-012015-08-022015-08-03等)编制索引,第一级列(IIIIII)是ID s,第二级列对应METRIC s abc,{{1 }})。我想将其重塑为以下内容

d

我已经(未成功)使用METRIC a b c d ID I 2015-08-01 0 1 2 3 2015-08-02 4 5 6 7 2015-08-03 8 9 10 11 II 2015-08-01 20 21 22 23 2015-08-02 24 25 26 27 2015-08-03 28 29 30 31 III 2015-08-01 40 41 42 43 2015-08-02 44 45 46 47 2015-08-03 48 49 50 51 .pivot.stack进行了调查,但是他们没有给我我想要的东西。我目前循环遍历.melt并构建数据框的列表,并将它们ID一起作为新数据框来获取我想要的内容。

任何建议都将不胜感激。

3 个答案:

答案 0 :(得分:4)

Let's use stack, swaplevel and sort_index:

df.stack(0).swaplevel(0,1).sort_index()

Output:

METRIC           a   b   c   d
ID                            
I   2015-08-01   0   1   2   3
    2015-08-02   4   5   6   7
    2015-08-03   8   9  10  11
II  2015-08-01  20  21  22  23
    2015-08-02  24  25  26  27
    2015-08-03  28  29  30  31
III 2015-08-01  40  41  42  43
    2015-08-02  44  45  46  47
    2015-08-03  48  49  50  51

答案 1 :(得分:3)

您可以让transposeT为您完成部分工作。

df.T.stack().unstack(1)

METRIC           a   b   c   d
ID                            
I   2015-08-01   0   1   2   3
    2015-08-02   4   5   6   7
    2015-08-03   8   9  10  11
II  2015-08-01  20  21  22  23
    2015-08-02  24  25  26  27
    2015-08-03  28  29  30  31
III 2015-08-01  40  41  42  43
    2015-08-02  44  45  46  47
    2015-08-03  48  49  50  51

答案 2 :(得分:0)

使用@piRSquared的方法,我们可以跳过转置,只需df.unstack().unstack(1)