python – Pandas – Dataframe.set_index – cómo mantener la columna de índice antigua

Tengo este Dataframe :

 import pandas as pd df = pd.DataFrame({'Hugo' : {'age' : 21, 'weight' : 75}, 'Bertram': {'age' : 45, 'weight' : 65}, 'Donald' : {'age' : 75, 'weight' : 85}}).T df.index.names = ['name'] age weight name Bertram 45 65 Donald 75 85 Hugo 21 75 

Quiero cambiar el índice a la columna 'age' :

 df.set_index('age', inplace=True) weight age 45 65 75 85 21 75 

El antiguo nombre de la columna de índice se pierde. ¿Hay alguna manera de cambiar el índice sin perder la columna de índice original y volver a obtener la columna antigua como columna ‘normal’, para que se vea así?

  name weight age 45 Bertram 65 75 Donald 85 21 Hugo 75 

Use reset_index primero y luego set_index :

 df = df.reset_index().set_index('age') print (df) name weight age 45 Bertram 65 75 Donald 85 21 Hugo 75 

Agregando el append=True y con reset_index

 df.set_index('age', append=True).reset_index(level=0) Out[80]: name weight age 45 Bertram 65 75 Donald 85 21 Hugo 75 

Su DataFrame df tiene name (= 'Bertram', 'Donald', 'Hugo' ) como índice

Es decir, tu df es:

  age weight name Bertram 45 65 Donald 75 85 Hugo 21 75 

Puede convertir el índice ( name ) en una nueva columna dentro de su DataFrame df usando el método .reset_index() .

 df.reset_index(inplace=True) 

name convierte en una columna y el nuevo índice es el índice entero estándar predeterminado:

Tu df se ve así ahora:

 Out[1]: name age weight 0 Bertram 45 65 1 Donald 75 85 2 Hugo 21 75 

Ahora, puede cambiar el índice para que age con el método .set_index() .

 df.set_index('age',inplace=True) 

df es ahora:

 Out[2]: name weight age 45 Bertram 65 75 Donald 85 21 Hugo 75 

Como @jezrael señala arriba, puedes hacer esto en un solo paso, en lugar de dos pasos, como este:

 df = df.reset_index().set_index('age') 

El siguiente es el más eficiente, ya que agrega el nuevo índice de age y se asegura de que esté en su lugar.

 df.set_index('age',append=True,inplace=True)