Verwandeln Sie Pandas Multi-Index in eine Spalte

155

Ich habe einen Datenrahmen mit 2 Indexstufen:

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

Was ich daraus machen möchte:

Trial    measurement       value

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

Wie kann ich das am besten machen?

Ich brauche dies, weil ich die Daten wie hier beschrieben aggregieren möchte , aber ich kann meine Spalten nicht so auswählen, wenn sie als Indizes verwendet werden.

TheChymera
quelle
2
Duplizieren: stackoverflow.com/questions/18624039/… Sie möchten den ersten Vorschlag. .reset_index()
TomAugspurger
1
Vielen Dank, ich habe mich tatsächlich viel darum gekümmert, aber "Multiindex zur Spalte machen" und ähnliche Abfragen haben mir immer Threads gebracht, die ihre Datenrahmen schwenken wollten ...
TheChymera
3
Es ist immer einfacher, eine Antwort zu finden, wenn Sie sie bereits kennen :)
TomAugspurger

Antworten:

191

Die reset_index () ist eine Methode , die Panda - Datenrahmen Indexwerte in den Datenrahmen als Spalten übertragen. Die Standardeinstellung für den Parameter ist drop = False (wodurch die Indexwerte als Spalten beibehalten werden).

Alles, was Sie .reset_index(inplace=True)nach dem Namen des DataFrame hinzufügen müssen:

df.reset_index(inplace=True)  
CraigSF
quelle
3
In meinem Fall, in dem ich 3 Indexebenen hatte, funktionierte das Zurücksetzen nicht. Alternative ist das Zuweisen eines neu zurückgesetzten Datenrahmens zu einem neuen: df2 = df.reset_index ()
Gorkem
8
Um nur eine bestimmte Ebene (n) zurückzusetzen, verwenden Siedf.reset_index(level=[...])
cs95
20

Dies trifft nicht wirklich auf Ihren Fall zu, könnte aber für andere (wie mich vor 5 Minuten) hilfreich sein, dies zu wissen. Wenn jemandes Multindex den gleichen Namen hat:

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

df.reset_index(inplace=True) schlägt fehl, da die erstellten Spalten nicht denselben Namen haben können.

Dann müssen Sie den Multindex mit umbenennen, um Folgendes df.index = df.index.set_names(['Trial', 'measurement'])zu erhalten:

                           value
Trial    measurement       

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

Und dann df.reset_index(inplace=True)wird wie ein Zauber wirken.

Ich bin auf dieses Problem gestoßen, nachdem ich in einer aufgerufenen Datums- / Uhrzeitspalte (kein Index) nach Jahr und Monat gruppiert hatte live_date, was bedeutete, dass sowohl Jahr als auch Monat benannt wurden live_date.

Karl Anka
quelle
1
Wie können sich Ihre Testwerte wiederholen? Ich hatte das gleiche Problem und es funktioniert, außer dass sich meine Werte nicht wiederholen.
Rich
4

Wie in einem Kommentar erwähnt, verwenden Sie: @ cs95, um nur eine Ebene zu löschen:

df.reset_index(level=[...])

Dadurch muss der gewünschte Index nach dem Zurücksetzen nicht neu definiert werden.

Sameagol
quelle