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

Asad Riaz 30 enero 2023
  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
Cómo convertir el índice de un Dataframe de Pandas en una columna

Introduciremos varios métodos para convertir el índice de un Pandas DataFrame 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