Mam ramkę danych z 2 poziomami indeksu:
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 to zrobić?
Potrzebuję tego, ponieważ chcę zagregować dane zgodnie z instrukcjami tutaj , ale nie mogę tak wybrać moich kolumn, jeśli są używane jako indeksy.
.reset_index()
Odpowiedzi:
Reset_index () to metoda pandy DataFrame które przesyłania wartości indeksu w DataFrame postaci kolumn. Domyślne ustawienie parametru to drop = False (co spowoduje zachowanie wartości indeksu jako kolumn).
Wszystko, co musisz zrobić, dodaj
.reset_index(inplace=True)
po nazwie ramki DataFrame:źródło
df.reset_index(level=[...])
To naprawdę nie dotyczy twojego przypadku, ale może być pomocne dla innych (takich jak ja 5 minut temu), aby wiedzieć. Jeśli multindeks ma taką samą nazwę, jak ta:
df.reset_index(inplace=True)
zakończy się niepowodzeniem, ponieważ utworzone kolumny nie mogą mieć takich samych nazw.Więc musisz zmienić nazwę multindeksu z,
df.index = df.index.set_names(['Trial', 'measurement'])
aby uzyskać:A potem
df.reset_index(inplace=True)
zadziała jak urok.Napotkałem ten problem po pogrupowaniu według roku i miesiąca w kolumnie datetime (nie indeksu) o nazwie
live_date
, co oznaczało, że nazwano zarówno rok, jak i miesiąclive_date
.źródło
Jak wspomniano w komentarzu @ cs95, aby obniżyć tylko jeden poziom, użyj:
df.reset_index(level=[...])
Pozwala to uniknąć ponownego definiowania żądanego indeksu po zresetowaniu.
źródło