Convertir Pandas Multi-Índice en columna
Tengo un dataframe 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
¿Cómo puedo hacerlo 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.
2 answers
El reset_index() es un método de pandas DataFrame que transferirá los 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 añadir .reset_index(inplace=True)
después del nombre del DataFrame:
df.reset_index(inplace=True)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-21 21:02:50
Esto realmente no se aplica a su caso, pero podría ser útil para otros (como yo hace 5 minutos) saber. Si uno de multindex tiene los mismos nombres como este:
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 compartir nombres.
Entonces necesitas renombrar el multindex con df.index = df.index.set_names(['Trial', 'measurement'])
para 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á como un encanto.
Encontré este problema después de agrupar por año y mes en una columna datetime(no índice) llamada live_date
, lo que significa que tanto el año como el mes fueron nombrados live_date
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-24 18:31:09