wake-up-neo.com

Verwandle Pandas Multi-Index in eine Spalte

Ich habe einen Datenrahmen mit 2 Indexebenen:

                         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 aggregieren möchte wie hier beschrieben , aber ich kann meine Spalten nicht so auswählen, wenn sie als Indizes verwendet werden.

118
TheChymera

Die reset_index () ist eine pandas= DataFrame-Methode, die Indexwerte als Spalten in den DataFrame überträgt. Die Standardeinstellung für den Parameter ist drop = False) (wodurch die Indexwerte als Spalten erhalten bleiben).

Alles was Sie tun müssen, ist .reset_index(inplace=True) nach dem Namen des DataFrames hinzuzufügen:

df.reset_index(inplace=True)  
152
CraigSF

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

                         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 keine Namen gemeinsam nutzen können.

Dann müssen Sie den Mehrfachindex mit df.index = df.index.set_names(['Trial', 'measurement']) umbenennen, um Folgendes 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 wird df.reset_index(inplace=True) wie ein Zauber wirken.

Ich bin auf dieses Problem gestoßen, nachdem ich in einer datetime-Spalte (nicht im Index) mit dem Namen live_date Nach Jahr und Monat gruppiert hatte, was bedeutete, dass sowohl Jahr als auch Monat den Namen live_date Hatten.

16
Karl Anka

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

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

Dies vermeidet, dass Sie Ihren gewünschten Index nach dem Zurücksetzen neu definieren müssen.

2
sameagol