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
Lo 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
¿Cómo puedo hacer esto mejor?
Necesito esto porque quiero agregar los datos como se indica aquí , pero no puedo seleccionar mis columnas así si están en uso como índices.
.reset_index()
Respuestas:
El reset_index () es un método pandas trama de datos que va a transferir valores de índice en la trama de datos como columnas. La configuración predeterminada para el parámetro es drop = False (que mantendrá los valores del índice como columnas).
Todo lo que tiene que hacer es agregar
.reset_index(inplace=True)
después del nombre del DataFrame:fuente
df.reset_index(level=[...])
Esto realmente no se aplica a su caso, pero podría ser útil para que otros (como yo hace 5 minutos) lo sepan. Si el índice múltiple tiene el mismo nombre como este:
df.reset_index(inplace=True)
fallará, porque las columnas que se crean no pueden tener los mismos nombres.Entonces, debe cambiar el nombre del índice múltiple con
df.index = df.index.set_names(['Trial', 'measurement'])
para obtener:Y luego
df.reset_index(inplace=True)
funcionará como un encanto.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 se nombraron tanto el año como el meslive_date
.fuente
Como @ cs95 mencionó en un comentario, para soltar solo un nivel, use:
df.reset_index(level=[...])
Esto evita tener que redefinir el índice deseado después de reiniciar.
fuente