【问题标题】:Combine multiple dataframes into dataframe of multi-index columns将多个数据框组合成多索引列的数据框
【发布时间】:2021-06-10 10:39:37
【问题描述】:

假设我有 3 个数据框,

df_1 代表收入

Year        TSLA    MSFT     AVY
2019         851     200   112.8
2018         725     150    92.6

df_2 代表其他一些收入

Year        TSLA    MSFT     AVY
2019          10      13      17
2018          11      14      18

df_3 代表费用

Year        TSLA    MSFT     AVY
2019         110     213     317
2018         111     214     418

获取以下df的代码可能是什么?

       TSLA                             MSFT                             AVY
Year   revenues other_revenues expenses revenues other_revenues expenses revenues other_revenues expenses
2019        851             10      110      200             13      213    112.8             17      317
2018        725             11      111      150             14      214     92.6             18      418

多索引形式的列在哪里?

谢谢

【问题讨论】:

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


    【解决方案1】:

    使用concatDataFrame.swaplevelDataFrame.sort_indexMultiIndex 进行排序:

    #if not Year is index first create it
    L = [x.set_index('Year') for x in [df_1, df_2, df_3]]
    df = (pd.concat(L, 
                   axis=1, 
                   keys=('evenues', 'other_revenues', 'expenses'))
            .swaplevel(1, 0, axis=1)
            .sort_index(axis=1))
    print (df)
             AVY                            MSFT                            TSLA  \
         evenues expenses other_revenues evenues expenses other_revenues evenues   
    Year                                                                           
    2019   112.8      317             17     200      213             13     851   
    2018    92.6      418             18     150      214             14     725   
    
                                  
         expenses other_revenues  
    Year                          
    2019      110             10  
    2018      111             11  
    

    编辑:对于原始订单中的订单,请从MultiIndex 的第一级唯一值中添加MultiIndex.from_product DataFrame.reindex

    sub = ['revenues', 'other_revenues', 'expenses']
    L = [x.set_index('Year') for x in [df_1, df_2, df_3]]
    df = (pd.concat(L, 
                   axis=1, 
                   keys=sub)
            .swaplevel(1, 0, axis=1))
    
    mux = pd.MultiIndex.from_product([df.columns.levels[0], sub])
    df = df.reindex(mux, axis=1)
            
    print (df)
             TSLA                             MSFT                          \
         revenues other_revenues expenses revenues other_revenues expenses   
    Year                                                                     
    2019      851             10      110      200             13      213   
    2018      725             11      111      150             14      214   
    
              AVY                          
         revenues other_revenues expenses  
    Year                                   
    2019    112.8             17      317  
    2018     92.6             18      418  
    

    【讨论】:

    • key 之后的交换级别和排序索引是否有错误?
    • @finmathstudent - 是的,它缺少一个',抱歉。
    • 如果我想为内层列索引指定顺序('revenues'、'other_revenues'、expenses'),代码是什么?而不是你选择的那种?
    • @finmathstudent - 稍等。
    猜你喜欢
    • 1970-01-01
    • 2019-04-05
    • 2018-02-17
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    相关资源
    最近更新 更多