Zamień Pandy Multi-Index w kolumnę

Mam ramkę danych z 2 poziomami indeksów:

                         value
Trial    measurement
    1              0        13
                   1         3
                   2         4
    2              0       NaN
                   1        12
    3              0        34 

Które chcę zamienić w to:

Trial    measurement       value

    1              0        13
    1              1         3
    1              2         4
    2              0       NaN
    2              1        12
    3              0        34 

Jak najlepiej mogę to zrobić?

Potrzebuję tego, ponieważ chcę agregować dane zgodnie z instrukcją tutaj , ale nie mogę tak wybrać moich kolumn, jeśli są używane jako indeksy.

Author: Community, 2013-11-21

2 answers

reset_index () jest metodą ramki danych Panda, która przeniesie wartości indeksu do ramki danych jako kolumny. Domyślnym ustawieniem parametru jest drop = False (które zachowa wartości indeksu jako kolumny).

Wszystko co musisz zrobić dodaj .reset_index(inplace=True) po nazwie ramki danych:

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/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-21 21:02:50

To tak naprawdę nie dotyczy twojej sprawy, ale może być pomocne dla innych (jak ja 5 minut temu), aby wiedzieć. Jeśli ktoś multindex ma takie same nazwy jak ta:

                         value
Trial        Trial
    1              0        13
                   1         3
                   2         4
    2              0       NaN
                   1        12
    3              0        34 

df.reset_index(inplace=True) nie powiedzie się, ponieważ utworzone kolumny nie mogą udostępniać nazw.

Więc musisz zmienić nazwę multindex z df.index = df.index.set_names(['Trial', 'measurement']) aby uzyskać:

                           value
Trial    measurement       

    1              0        13
    1              1         3
    1              2         4
    2              0       NaN
    2              1        12
    3              0        34 

I wtedy df.reset_index(inplace=True) będzie działać jak urok.

Napotkałem ten problem po pogrupowaniu według roku i miesiąca na kolumnie datetime (nie Indeks) o nazwie live_date, co oznaczało, że zarówno rok, jak i miesiąc zostały nazwane 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/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-24 18:31:09