Convierta Pandas Multi-Index en una columna
Tengo un marco de datos con 2 niveles de índice:
value
Trial measurement
1 0 13
1 3
2 4
2 0 NaN
1 12
3 0 34
Que quiero convertir en esto:
Trial measurement value
1 0 13
1 1 3
1 2 4
2 0 NaN
2 1 12
3 0 34
¿Cuál es la mejor manera de hacer esto?
Necesito esto porque quiero agregar los datos como se indica aquí , pero no puedo seleccionar mis columnas de esa manera si están en uso como índices.
reset_index () es un método de DataFrame de pandas que transferirá valores de índice al DataFrame como columnas. La configuración predeterminada para el parámetro es drop=False (que mantendrá los valores del índice como columnas).
Todo lo que tienes que hacer es llamar .reset_index()
después del nombre del DataFrame:
df = df.reset_index()
Esto realmente no se aplica a su caso, pero podría ser útil que otros (como yo hace 5 minutos) lo sepan. Si el multindex tiene el mismo nombre así:
value
Trial Trial
1 0 13
1 3
2 4
2 0 NaN
1 12
3 0 34
df.reset_index(inplace=True)
fallará, porque las columnas que se crean no pueden tener los mismos nombres.
Entonces necesitas cambiar el nombre del multindex para df.index = df.index.set_names(['Trial', 'measurement'])
obtener:
value
Trial measurement
1 0 13
1 1 3
1 2 4
2 0 NaN
2 1 12
3 0 34
Y luego df.reset_index(inplace=True)
funcionará a las mil maravillas.
Encontré este problema después de agrupar por año y mes en una columna de fecha y hora (no índice) llamada live_date
, lo que significaba que tanto el año como el mes tenían el nombre live_date
.
Puede haber situaciones en las que df.reset_index()
no se pueda utilizar (por ejemplo, cuando también necesite el índice). En este caso, utilice index.get_level_values()
para acceder a los valores del índice directamente:
df['Trial'] = df.index.get_level_values(0)
df['measurement'] = df.index.get_level_values(1)
Esto asignará valores de índice a columnas individuales y mantendrá el índice.
Consulte los documentos para obtener más información.