1

I have a dataframe that looks like so, with a multi index column:

              TITLE1  TITLE2  TITLE3
idx1   idx2    val1    val2    val3
       idx3    va11    val2    val3
       idx3    va11    val2    val3
       idx3    va11    val2    val3
idx2   idx4    val1    val2    val3
       idx5    va11    val2    val3
       idx6    va11    val2    val3
       idx7    va11    val2    val3

And I want to rename the values of the second index and add a title to it:

       NEW_TITLE  TITLE1  TITLE2  TITLE3
idx1     new1      val1    val2    val3
         new3      va11    val2    val3
         new3      va11    val2    val3
         new3      va11    val2    val3
idx2     new4      val1    val2    val3
         new5      va11    val2    val3
         new6      va11    val2    val3
         new7      va11    val2    val3

I tried to manipulate the multindex but it didn't work.

any ideas please?

TheDaJon
  • 545
  • 2
  • 8
  • 24
  • Possible duplicate of [How to convert pandas index in a dataframe to a column?](http://stackoverflow.com/questions/20461165/how-to-convert-pandas-index-in-a-dataframe-to-a-column) – gzc Dec 25 '16 at 08:07
  • @gzc I have multiindex so it doesn't work for me – TheDaJon Dec 25 '16 at 08:08
  • Check the top answer which includes multi-index convertion. – gzc Dec 25 '16 at 08:11

2 Answers2

1

Here's one way

In [93]: df
Out[93]:
          TITLE1 TITLE2 TITLE3
A    B
idx1 idx2   val1   val2   val3
     idx3   va11   val2   val3
     idx3   va11   val2   val3
     idx3   va11   val2   val3
idx2 idx4   val1   val2   val3
     idx5   va11   val2   val3
     idx6   va11   val2   val3
     idx7   va11   val2   val3

reset index on level 1.

In [94]: dff = df.reset_index(level=1)

In [95]: dff
Out[95]:
         B TITLE1 TITLE2 TITLE3
A
idx1  idx2   val1   val2   val3
idx1  idx3   va11   val2   val3
idx1  idx3   va11   val2   val3
idx1  idx3   va11   val2   val3
idx2  idx4   val1   val2   val3
idx2  idx5   va11   val2   val3
idx2  idx6   va11   val2   val3
idx2  idx7   va11   val2   val3

Replace values in the column.

In [96]: dff['B'] = dff['B'].str.replace('idx', 'new')

In [97]: dff
Out[97]:
         B TITLE1 TITLE2 TITLE3
A
idx1  new2   val1   val2   val3
idx1  new3   va11   val2   val3
idx1  new3   va11   val2   val3
idx1  new3   va11   val2   val3
idx2  new4   val1   val2   val3
idx2  new5   va11   val2   val3
idx2  new6   va11   val2   val3
idx2  new7   va11   val2   val3
Zero
  • 74,117
  • 18
  • 147
  • 154
1

use pd.DataFrame.rename_axis

df.rename_axis([None, 'NEW_TITLE'])

enter image description here

piRSquared
  • 285,575
  • 57
  • 475
  • 624