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'])
.
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