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.

Author: Community, 2013-11-21

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)  
 118
Author: CraigSF,
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.

 11
Author: Karl Anka,
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