【问题标题】:Convert MultiIndex Columns to Standard Columns将 MultiIndex 列转换为标准列
【发布时间】:2020-03-02 16:09:05
【问题描述】:

我们如何转换包含 MultiIndex 列的 Pandas DataFrame,例如

                FB                  AAPL
                open    volume      open    volume
date
2019-10-30      189.56  28734995    244.76  31130522
2019-10-31      196.70  42286529    247.24  34790520
2019-11-01      192.85  21711829    249.54  37781334

到一个具有常规列的索引级别,其中一个索引级别现在是所有行中的一列

                open    volume      ticker  
date
2019-10-30      189.56  28734995    FB      
2019-10-31      196.70  42286529    FB      
2019-11-01      192.85  21711829    FB      
2019-10-30      244.76  31130522    AAPL
2019-10-31      247.24  34790520    AAPL
2019-11-01      249.54  37781334    AAPL

【问题讨论】:

    标签: python python-3.x pandas multi-index


    【解决方案1】:

    主要思想是使用DataFrame.stackDataFrame.reset_index 将MultiIndex 第二级转换为列:

    df = df.stack(0).rename_axis(('date','ticker')).reset_index(level=1)
    print (df)
               ticker    open    volume
    date                               
    2019-10-30   AAPL  244.76  31130522
    2019-10-30     FB  189.56  28734995
    2019-10-31   AAPL  247.24  34790520
    2019-10-31     FB  196.70  42286529
    2019-11-01   AAPL  249.54  37781334
    2019-11-01     FB  192.85  21711829
    

    如果排序很重要,则使用ordered catagoricals 进行代码、排序和使用DataFrame.pop 重新分配最后位置的列:

    df1 = df.stack(0).rename_axis(('date','ticker')).reset_index(level=1)
    df1['ticker'] = pd.Categorical(df1.pop('ticker'), 
                                   ordered=True, 
                                   categories=df.columns.get_level_values(0).unique())
    df1 = df1.sort_values(['ticker','date'])
    print (df1)
                  open    volume ticker
    date                               
    2019-10-30  189.56  28734995     FB
    2019-10-31  196.70  42286529     FB
    2019-11-01  192.85  21711829     FB
    2019-10-30  244.76  31130522   AAPL
    2019-10-31  247.24  34790520   AAPL
    2019-11-01  249.54  37781334   AAPL
    

    【讨论】:

      猜你喜欢
      • 2017-04-28
      • 2023-03-02
      • 2013-03-22
      • 2017-11-24
      • 2022-11-01
      • 2018-07-25
      • 2019-04-07
      • 2015-12-15
      • 1970-01-01
      相关资源
      最近更新 更多