Swap level-one from index with column level (Pandas Multiindex Dataframe)

前端 未结 1 1152
孤城傲影
孤城傲影 2021-02-15 17:19

I have a multiindexed pandas.Dataframe which is something like this:

          BAZ    PAL
Foo  Bar          
124   1    A     B
      2    C     D
134   1    E           


        
1条回答
  •  爱一瞬间的悲伤
    2021-02-15 17:50

    You need to unstack your existing index level Foo, stack your desired column 'Coo', and then rearrange the index levels. After swapping your index levels, you probably want to sort it. As a final touch, you may want to drop the column name of all the values (val).

    df = (pd.DataFrame({'Foo': [124, 124, 134, 134] * 2, 
                        'Bar': [1, 2, 1, 2] * 2, 
                        'Coo': ['BAZ'] * 4 + ['PAL'] * 4, 
                        'val': list('ACEGBDFH')})
          .set_index(['Foo', 'Bar', 'Coo'])
          .unstack('Coo'))
    
    >>> df
            val    
    Coo     BAZ PAL
    Foo Bar        
    124 1     A   B
        2     C   D
    134 1     E   F
        2     G   H
    
    df = df.unstack('Foo').stack('Coo')
    df.index = df.index.swaplevel(0, 1)
    
    >>> df
            val    
    Foo     124 134
    Coo Bar        
    BAZ 1     A   E
    PAL 1     B   F
    BAZ 2     C   G
    PAL 2     D   H
    
    df.sort_index(inplace=True)
    
    >>> df
            val    
    Foo     124 134
    Coo Bar        
    BAZ 1     A   E
        2     C   G
    PAL 1     B   F
        2     D   H
    
    df.columns = df.columns.droplevel()
    
    >>> df
    Foo     124 134
    Coo Bar        
    BAZ 1     A   E
        2     C   G
    PAL 1     B   F
        2     D   H
    

    0 讨论(0)
提交回复
热议问题