0Pricing
Pandas & NumPy Academy · Lección

Establecer y restablecer el índice

Convierta una columna en el índice de filas con set_index(), devuélvala a su estado original con reset_index() y conozca la vista general de un MultiIndex.

Establecer y restablecer el índice es una lección gratuita de Pandas & NumPy Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Pandas & NumPy Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Pandas & NumPy Academy incluye 4 lecciones en total.

¿Qué es el índice del DataFrame?

Todo DataFrame de Pandas tiene un índice de filas: un conjunto de etiquetas asociadas a cada fila. El índice predeterminado es un RangeIndex (0, 1, 2, …), pero puede sustituirlo por cualquier columna que actúe como identificador natural: una fecha, un ID de producto, un ID de usuario o cualquier clave única. Un índice significativo mejora la legibilidad, permite realizar cortes basados en etiquetas y es necesario para remuestrear series temporales.

import pandas as pd

df = pd.DataFrame({
    'date': ['2024-01-01', '2024-01-02', '2024-01-03'],
    'sales': [100, 200, 150]
})
print('Default index:', df.index.tolist())  # [0, 1, 2]
print(df)

set_index(): convertir una columna en índice

DataFrame.set_index('col') convierte la columna especificada en el índice de filas y la elimina de las columnas normales. Los valores de la columna se convierten en etiquetas de fila. Esta es la forma estándar de hacer que un DataFrame sea más expresivo cuando una columna actúa como clave natural. Se devuelve un DataFrame nuevo; el original no cambia, a menos que se utilice inplace=True.

import pandas as pd

df = pd.DataFrame({
    'date': ['2024-01-01', '2024-01-02', '2024-01-03'],
    'sales': [100, 200, 150]
})

df = df.set_index('date')
print(df)
#             sales
# date
# 2024-01-01    100
# 2024-01-02    200
# 2024-01-03    150

print(df.index)  # Index(['2024-01-01', ...], dtype='object', name='date')

Seleccionar filas con un índice personalizado

Una vez que una columna significativa se convierte en el índice, puede utilizar .loc[label] para recuperar filas por etiqueta con una sintaxis clara y legible, sin necesidad de máscaras booleanas. En un DatetimeIndex, incluso puede utilizar cadenas de fecha parciales, como df.loc['2024-01'], para seleccionar todas las filas de enero de 2024.

import pandas as pd

df = pd.DataFrame({
    'product': ['A', 'B', 'C'],
    'price': [10, 20, 30],
    'stock': [100, 50, 75]
})
df = df.set_index('product')

# Access row by label
print(df.loc['B'])
# price    20
# stock    50
# Name: B, dtype: int64

set_index() con varias columnas: MultiIndex

Pasar una lista de nombres de columnas a set_index() crea un MultiIndex (índice jerárquico). Se puede acceder al DataFrame resultante mediante tuplas en .loc[]. MultiIndex es esencial para series temporales agrupadas (región + fecha), datos de panel (sujeto + tiempo) y cualquier análisis que requiera agrupar las filas en dos niveles.

import pandas as pd

df = pd.DataFrame({
    'region': ['East', 'East', 'West', 'West'],
    'year': [2023, 2024, 2023, 2024],
    'revenue': [100, 150, 200, 220]
})

df = df.set_index(['region', 'year'])
print(df)
#              revenue
# region year
# East   2023      100
#        2024      150
# West   2023      200
#        2024      220

print(df.loc[('East', 2024)])  # revenue = 150

Parámetro drop= en set_index()

De forma predeterminada, set_index('col') elimina la columna de las columnas normales del DataFrame cuando esta se convierte en el índice. Pase drop=False para conservar la columna y utilizarla también como índice. Esto resulta útil cuando desea acceder mediante etiquetas, pero también necesita la columna para realizar cálculos en el espacio de columnas normales.

import pandas as pd

df = pd.DataFrame({'id': [1, 2, 3], 'value': [10, 20, 30]})

# Keep 'id' as both index and column
df_with_both = df.set_index('id', drop=False)
print(df_with_both)
#     id  value
# id
# 1    1     10
# 2    2     20
# 3    3     30

reset_index(): devolver el índice a una columna

reset_index() es la operación inversa de set_index(): mueve el índice de filas actual a una columna normal y sustituye el índice por el RangeIndex predeterminado. Esto suele ser necesario después de un groupby().agg() o de operaciones que dejan un índice significativo que necesita utilizar como columna en procesos posteriores.

import pandas as pd

df = pd.DataFrame({'sales': [100, 200]}, index=['East', 'West'])
df.index.name = 'region'

reset = df.reset_index()
print(reset)
#   region  sales
# 0   East    100
# 1   West    200

print(reset.index.tolist())  # [0, 1] — default RangeIndex restored

reset_index(drop=True)

Pasar drop=True a reset_index() descarta por completo el índice actual en lugar de moverlo a una columna. Utilícelo cuando el índice actual no contenga información significativa (por ejemplo, después de filtrar filas, cuando el índice tiene saltos como 0, 3 y 7) y solo desee un índice secuencial limpio que empiece en 0.

import pandas as pd

df = pd.DataFrame({'x': [10, 20, 30, 40, 50]})
filtered = df[df['x'] > 15]
print('Filtered index:', filtered.index.tolist())  # [1, 2, 3, 4]

# Drop the old index — don't move it to a column
clean = filtered.reset_index(drop=True)
print('Clean index:', clean.index.tolist())  # [0, 1, 2, 3]

reset_index() después de groupby

Después de llamar a groupby().agg(), las claves de agrupación se convierten en el índice. Llamar a reset_index() las convierte de nuevo en columnas normales, lo que produce un resultado tabular plano más fácil de utilizar, combinar o exportar. Este es uno de los usos más habituales de reset_index() en la práctica.

import pandas as pd

df = pd.DataFrame({
    'dept': ['Eng', 'HR', 'Eng', 'Sales', 'HR'],
    'salary': [90000, 50000, 80000, 70000, 55000]
})

# After groupby, dept becomes the index
agg = df.groupby('dept')['salary'].mean()
print(type(agg), agg.index.tolist())
# dept is the index

# Reset makes dept a regular column again
result = agg.reset_index()
result.columns = ['dept', 'avg_salary']
print(result)

rename_axis() para asignar un nombre al índice

Cuando el índice de filas no tiene nombre, o cuando desea cambiarle el nombre para mayor claridad, utilice df.rename_axis('new_name') (para el índice de filas) o df.rename_axis('col_name', axis=1) (para el eje de columnas). Asignar al índice un nombre significativo hace que el resultado sea más autoexplicativo, especialmente al exportarlo a CSV, donde el nombre del índice se convierte en un encabezado de columna.

import pandas as pd

df = pd.DataFrame({'sales': [100, 200, 300]}, index=['A', 'B', 'C'])
print(df.index.name)  # None

# Name the index
df = df.rename_axis('region')
print(df)
#         sales
# region
# A         100
# B         200
# C         300

Reindexar para completar huecos

DataFrame.reindex(new_index) adapta el DataFrame para que coincida con un índice nuevo y rellena con NaN las posiciones que existen en el índice nuevo, pero no en los datos originales. Esto se utiliza para alinear DataFrames con un índice completo común; por ejemplo, para garantizar que aparezca cada mes de un año aunque no existan datos para algunos meses.

import pandas as pd

df = pd.DataFrame({
    'month': ['Jan', 'Mar', 'Jun'],
    'revenue': [100, 200, 300]
}).set_index('month')

all_months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']
complete = df.reindex(all_months)
print(complete)
#       revenue
# Jan     100.0
# Feb       NaN   <- filled with NaN
# Mar     200.0
# Apr       NaN
# May       NaN
# Jun     300.0

reset_index y selección de niveles en MultiIndex

En un DataFrame con MultiIndex, reset_index() mueve todos los niveles a columnas de forma predeterminada. Pase level= para restablecer únicamente niveles específicos. Esto resulta útil cuando desea conservar un nivel como índice (por ejemplo, mantener la fecha como índice) y mover solo el otro nivel a una columna.

import pandas as pd

df = pd.DataFrame(
    {'revenue': [100, 150, 200, 220]},
    index=pd.MultiIndex.from_tuples(
        [('East', 2023), ('East', 2024), ('West', 2023), ('West', 2024)],
        names=['region', 'year']
    )
)

# Reset only the 'year' level, keep 'region' as index
df2 = df.reset_index(level='year')
print(df2)
#         year  revenue
# region
# East    2023      100
# East    2024      150
# West    2023      200
# West    2024      220

Comprobación rápida

Compruebe su comprensión de cómo establecer y restablecer el índice.

Recapitulación de la lección

En esta lección ha aprendido que set_index('col') convierte una columna en el índice de filas para acceder mediante etiquetas, que pasar una lista crea un MultiIndex y que reset_index() devuelve el índice a una columna (utilice drop=True para descartarlo). Utilice reindex() para alinear los datos con un índice de destino completo y rellenar con NaN las posiciones ausentes. Estas técnicas son fundamentales para las próximas lecciones sobre GroupBy y combinación de datos.

Preguntas frecuentes

¿La lección «Establecer y restablecer el índice» es gratis?

Sí — el texto completo de «Establecer y restablecer el índice» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Pandas & NumPy Academy, actualiza a CoddyKit PRO. El curso de Pandas & NumPy Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Establecer y restablecer el índice»?

Convierta una columna en el índice de filas con set_index(), devuélvala a su estado original con reset_index() y conozca la vista general de un MultiIndex. Practicas Pandas & NumPy Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Pandas & NumPy Academy?

No se requiere experiencia previa. Pandas & NumPy Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Establecer y restablecer el índice»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Pandas & NumPy Academy?

Sí. Cada lección de Pandas & NumPy Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Ordenar por valores de columna
  2. Ordenar por índice
  3. Asignar rangos a los valores
  4. Establecer y restablecer el índice
← Volver a Pandas & NumPy Academy