2017-04-11 66 views
1

我有以下的熊猫数据框:大熊猫命名:指数的变化值特定列仅

    Cost 
Year Month ID 
2016 1  10 40 
     2  11 50 
2017 4  1  60 

YearMonthID弥补指数。我想将Month中的值设置为等效名称(例如1 = 1月,2 = 2月)。我想出了下面的代码:

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 

我明明只希望更改当月列中的值。我怎样才能解决这个问题?

回答

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 
+0

哪里是我的字典映射数缩写?那是'm'? –

+0

@ jcmetz21哎呀,我编辑了这个帖子 – piRSquared

+0

看起来不错,谢谢! –