pandas rename:仅更改特定列的索引值

时间:2017-04-11 22:10:54

标签: python pandas indexing

我有以下pandas数据帧:

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

YearMonthID组成了索引。我想将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列中的值。我该如何解决这个问题?

1 个答案:

答案 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