Reset a column's MultiIndex levels

后端 未结 3 1185
忘了有多久
忘了有多久 2020-12-14 01:14

Is there a shorter way of dropping a column MultiIndex level (in my case, basic_amt) except transposing it twice?

In [704]: test
Out[704]: 
             


        
3条回答
  •  青春惊慌失措
    2020-12-14 01:47

    How about simply reassigning df.columns:

    levels = df.columns.levels
    labels = df.columns.labels
    df.columns = levels[1][labels[1]]
    

    For example:

    import pandas as pd
    
    columns = pd.MultiIndex.from_arrays([['basic_amt']*4,
                                         ['NSW','QLD','VIC','All']])
    index = pd.Index(['All', 'Full Time', 'Part Time'], name = 'Faculty')
    df = pd.DataFrame([(1,1,2,4),
                       (0,01,0,1),
                       (1,0,2,3)])
    df.columns = columns
    df.index = index
    

    Before:

    print(df)
    
               basic_amt               
                     NSW  QLD  VIC  All
    Faculty                            
    All                1    1    2    4
    Full Time          0    1    0    1
    Part Time          1    0    2    3
    

    After:

    levels = df.columns.levels
    labels = df.columns.labels
    df.columns = levels[1][labels[1]]
    print(df)
    
               NSW  QLD  VIC  All
    Faculty                      
    All          1    1    2    4
    Full Time    0    1    0    1
    Part Time    1    0    2    3
    

提交回复
热议问题