我有以下pandas数据帧:
Cost
Year Month ID
2016 1 10 40
2 11 50
2017 4 1 60
列Year
,Month
和ID
组成了索引。我想将Month
中的值设置为等效的名称(例如1 = Jan,2 = Feb)。我想出了以下代码:
df.rename(index={i: calendar.month_abbr[i] for i in range(1, 13)}, inplace=True)
但是,这会更改索引中每列中的值:
Cost
Year Month ID
2016 Jan 10 40
Feb 11 50
2017 Apr Jan 60 # Jan here is incorrect
我显然只想更改Month列中的值。我该如何解决这个问题?
答案 0 :(得分:2)
使用set_levels
m = {1: 'Jan', 2: 'Feb', 4: 'Mar'}
df.index.set_levels(
df.index.levels[1].to_series().map(m).values,
1, inplace=True)
print(df)
Cost
Year Month ID
2016 Jan 10 40
Feb 11 50
2017 Mar 1 60