【问题标题】:Converting a pandas MultiIndex DataFrame from rows-wise to column-wise将 pandas MultiIndex DataFrame 从行转换为列
【发布时间】:2013-03-22 23:45:51
【问题描述】:

我正在使用 zipline 和 pandas 并已使用 to_frame() 方法将 pandas.Panel 转换为 pandas.DataFrame。这是生成的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 等,但这些方法不是我想要的。在这一点上我真的很困,任何帮助表示赞赏。

【问题讨论】:

    标签: python pandas multi-index zipline


    【解决方案1】:

    因为您已经有一个 MultiIndex,所以您想使用 stackunstack 将行移动到列,反之亦然。话虽这么说,unstack 应该完全按照您的意愿去做。如果您有一个 DataFrame df,那么 df2 = df.unstack('minor') 应该可以解决问题。或者更简单地说,因为默认情况下stack/unstack 使用最内层df2 = df.unstack()

    【讨论】:

    • 啊;打败我。 pivot 也应该可以工作,在重置索引后,即df.reset_index().pivot("major", "minor")(有或没有, "price")["price"],取决于名称是否仍然浮动有多重要。)
    • 很好,我显然没有正确使用 unstack,谢谢。
    猜你喜欢
    • 2020-05-27
    • 2023-03-02
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    • 2023-03-22
    • 2019-02-08
    • 2017-11-24
    相关资源
    最近更新 更多