将pandas MultiIndex DataFrame从行方式转换为列方式

Jas*_*pel 8 python multi-index pandas zipline

我在zipline和pandas工作,并使用该方法pandas.Panel将a 转换为a .这是结果,你可以看到是多索引的:pandas.DataFrameto_frame()pandas.DataFrame

                                  price
major                     minor                
2008-01-03 00:00:00+00:00 SPY    129.93
                          KO      26.38
                          PEP     64.78
2008-01-04 00:00:00+00:00 SPY    126.74
                          KO      26.43
                          PEP     64.59
2008-01-07 00:00:00+00:00 SPY    126.63
                          KO      27.05
                          PEP     66.10
2008-01-08 00:00:00+00:00 SPY    124.59
                          KO      27.16
                          PEP     66.63
Run Code Online (Sandbox Code Playgroud)

我需要将此框架转换为如下所示:

                          SPY     KO     PEP
2008-01-03 00:00:00+00:00 129.93  26.38  64.78
2008-01-04 00:00:00+00:00 126.74  26.43  64.59
2008-01-07 00:00:00+00:00 126.63  27.05  66.10
2008-01-08 00:00:00+00:00 124.59  27.16  66.63
Run Code Online (Sandbox Code Playgroud)

我已经尝试过pivot方法,stack/unstack等等,但这些方法并不是我想要的.我真的非常坚持这一点,任何帮助都表示赞赏.

bdi*_*nte 12

因为你已经有了一个MultiIndex,stack并且unstack你想用它来将行移动到cols,反之亦然.话虽这么说,unstack应该完全按照你想要的方式完成.如果你有一个DataFrame,df那么df2 = df.unstack('minor')应该这样做.或者更简单,因为默认情况下stack/ unstack使用最里面的水平,df2 = df.unstack().

  • AARGH; 打败了我.重置索引后,`pivot`也应该工作,即`df.reset_index().pivot("major","minor")`(带或不带`,'price")`或`["price"] `,取决于名称是否仍在浮动的重要程度.) (4认同)