Cómo convertir el índice de un Dataframe de Pandas en una columna

  1. df.index para añadir el índice como una nueva columna
  2. reset_index con rename_axis para renombrar el nombre de la columna de índice actual
  3. método set_index para convertir la columna en índice
  4. MultiIndex para establecer múltiples capas de index en la columns

Introduciremos varios métodos para convertir el índice de un dataframe de Pandas en una columna, como df.index, set_index, y reset_index con rename_axis para renombrar el índice.

También introduciremos cómo podemos aplicar Multi-Index a un Dataframe dado con múltiples capas de índices.

df.index para añadir el índice como una nueva columna

La forma más simple de añadir el índice como la columna es añadiendo df.index como una nueva columna al dataframe.

Considere el siguiente código:

# python 3.x
import pandas as pd
df = pd.DataFrame([
    (1,2,None),
    (None,4,None),
    (5,None,7),
    (5,None,None)
    ],columns=['a','b','d'])
df['index'] = df.index
print(df)

Producción:

     a    b    d  index1
0  1.0  2.0  NaN       0
1  NaN  4.0  NaN       1
2  5.0  NaN  7.0       2
3  5.0  NaN  NaN       3

reset_index con rename_axis para renombrar el nombre de la columna de índice actual

Podemos cambiar el nombre de nuestro index, y luego usar reset_index para una serie:

# python 3.x
import pandas as pd

df = pd.DataFrame([
    (1,2,None),
    (None,4,None),
    (5,None,7),
    (5,None,None)], 
    columns=['a','b','d'])
df = df.rename_axis('index').reset_index()
print(df)

Producción:

   index    a    b    d
0      0  1.0  2.0  NaN
1      1  NaN  4.0  NaN
2      2  5.0  NaN  7.0
3      3  5.0  NaN  NaN

método set_index para convertir la columna en índice

Podemos convertir cualquier columna en index usando el método set_index:

# python 3.x
import pandas as pd
df = pd.DataFrame([
    (1,2,None),
    (None,4,None),
    (5,4,7),
    (5,5,None)], 
    columns=['a','b','d'])
df.set_index('b',inplace=True)
print(df)

Producción:

     a    d
b          
2  1.0  NaN
4  NaN  NaN
4  5.0  7.0
5  5.0  NaN

O si queremos eliminar el nombre del index, como en el original, podemos hacer df.index.name = None:

# python 3.x
import pandas as pd
df = pd.DataFrame([
    (1,2,None),
    (None,4,None),
    (5,4,7),
    (5,5,None)
    ],columns=['a','b','d'])
df.set_index('b',inplace=True)
df.index.name = None
print(df)

Producción:

     a    d
2  1.0  NaN
4  NaN  NaN
4  5.0  7.0
5  5.0  NaN

MultiIndex para establecer múltiples capas de index en la columns

Podemos usar la función MultiIndex.from_product() para hacer un MultiIndex como sigue:

# python 3.x
import pandas as pd
import numpy as np
index = pd.MultiIndex.from_product([
    ['Burger', 'Steak', 'Sandwich'], 
    ['Half', 'Full']], 
    names=['Item', 'Type'])
df = pd.DataFrame(index=index, 
                  data=np.random.randint
                  (0, 10, (6,4)), 
                  columns=list('abcd'))
print(df)

Producción:

               a  b  c  d
Item     Type            
Burger   Half  0  3  9  1
         Full  2  2  0  5
Steak    Half  8  4  5  5
         Full  5  8  0  7
Sandwich Half  2  8  9  5
         Full  4  4  5  9

Artículo relacionado - Pandas DataFrame

  • Cómo borrar una fila basada en el valor de la columna en Pandas DataFrame
  • Cómo agregar una nueva columna al DataFrame existente con valor predeterminado en Pandas