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

时间:2013-04-01 20:28:44

标签: python pandas multi-index zipline

我正在使用zipline和pandas,并使用pandas.Panel方法将pandas.DataFrame转换为to_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

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

                          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

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

1 个答案:

答案 0 :(得分:12)

由于您已经安装了MultiIndex,因此您需要使用stackunstack将行移至cols,反之亦然。话虽这么说,unstack应该完全按照你想要的方式完成。如果你有一个DataFrame df,那么df2 = df.unstack('minor')就可以了。或者更简单,因为默认情况下stack / unstack使用最里面的级别df2 = df.unstack()