Search code examples
pythonpandasrenamemulti-index

Rename specific index level in multiindex data frame


What I want to do can perfectly be done in this way:

df.reset_index('level_x', inplace=True, drop=False)
df.rename(columns={'level_x': 'level_y', inplace=True)
df.set_index('level_y', append=True)

but I am very sure there is a one liner (and better) approach. Something like

df.rename(level={'level_x': 'level_y'}, inplace=True)

which of course does not work (I tried several others as well such as .rename(index=...), .rename(...), etc.). Surprisingly neither Google nor ChatGPT are telling me how to do this trivial operation...

Consider for example df = pandas.DataFrame({'level_x':[1,2,3], 'asd':[2,3,4], 'a column':[3,4,5]}).set_index(['level_x','asd']).


Solution

  • You can use Index.rename:

    df.index.rename({'level_x': 'level_y'}, inplace=True)
    

    Or:

    df.index = df.index.rename({'level_x': 'level_y'})
    

    Example:

    print(df)
                     A
    level_w level_x   
    1       A        X
    2       B        X
    3       B        X
    
    df.index = df.index.rename({'level_x': 'level_y'})
    print(df)
                     A
    level_w level_y   
    1       A        X
    2       B        X
    3       B        X