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.
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)
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.
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.