Python Pandas: Gruppieren Sie die datetime-Spalte in Stunden- und Minutenaggregationen

Lesezeit: 3 Minuten

Das scheint ziemlich einfach zu sein, aber nach fast einem ganzen Tag habe ich die Lösung nicht gefunden. Ich habe meinen Datenrahmen mit read_csv geladen und eine Datums- und eine Zeitspalte einfach analysiert, kombiniert und in einer Spalte indiziert, aber jetzt möchte ich in der Lage sein, Berechnungen basierend auf Stunden- und Minutengruppierungen ähnlich wie in zu ändern und durchzuführen Excel-Pivot.

Ich weiß, wie man auf Stunde oder Minute neu abtastet, aber es behält den Datumsteil bei, der jeder Stunde / Minute zugeordnet ist, während ich den Datensatz NUR zu Stunde und Minute aggregieren möchte, ähnlich wie beim Gruppieren in Excel-Pivots und Auswählen von “Stunde” und “Minute”. nichts anderes auswählen.

Jede Hilfe wäre sehr willkommen.

  • Würde es helfen, eine zu bekommen time Objekt von jedem datetime einen hast du? Sie könnten eine erstellen pandas.Series Objekt von Ihnen dataframe.index und weisen Sie es dann dem Index zu (ersetzt den aktuellen). Könnten Sie einige Zeilen Ihres Datenrahmens “drucken”?

    – Heltonbiker

    28. April 13 um 18:18 Uhr

  • Danke schön. Ich bin nicht mit der Verwendung des Zeitobjekts vertraut, um die Uhrzeit aus der datetime-Spalte abzurufen, wenn Sie das meinen. Ich habe gerade einen Weg gefunden, der dem, was ich brauche, sehr nahe kommt, indem ich den folgenden Code für stündlich bzw. ims_havas.index.hour).sum()

    – horatio1701d

    28. April 13 um 18:34 Uhr

Python Pandas Gruppieren Sie die datetime Spalte in Stunden und Minutenaggregationen
Wes McKinney

Kannst du nicht, wo df ist Ihr DataFrame:

times = pd.to_datetime(df.timestamp_col)
df.groupby([times.dt.hour, times.dt.minute]).value_col.sum()

  • Ja, das funktioniert auch perfekt für mich, aber ich habe eine Folgefrage: Wie kann ich diese “gruppierte Zeitreihe” als meine x-Achse in einem Matlibplot verwenden?

    – 2705114-john

    12. März 14 um 21:54 Uhr

  • Ich hatte damit zu tun df.groupby([times.dt.hour, times.dt.minute]) ...

    – akilat90

    26. Oktober 17 um 5:29 Uhr

  • Funktioniert das in Python 3? Die pd.to_datetime-Funktion scheint ein pandas.core.series.Series-Objekt zu erstellen, jedoch ohne Datetime-Funktionen. Ich erhalte “AttributeError: ‘Series’-Objekt hat kein Attribut ‘Stunde'”.

    – Adrian Keister

    10. September 18 um 17:18 Uhr

  • @AdrianKeister es funktioniert, du musst nur das Präfix dt setzen. In diesem speziellen Fall würde es so gehen times.dt.hour, wie @akilat90 sagte.

    – Raumar

    4. Juni 19 um 10:42 Uhr


Python Pandas Gruppieren Sie die datetime Spalte in Stunden und Minutenaggregationen
Nix GD

Der Code von Wes hat bei mir nicht funktioniert. Aber die DatetimeIndex-Funktion (Dokumente) Tat:

times = pd.DatetimeIndex(data.datetime_col)
grouped = df.groupby([times.hour, times.minute])

Das DatetimeIndex-Objekt ist eine Darstellung von Zeiten in Pandas. Die erste Zeile erstellt ein Array der Datums- und Uhrzeitangaben. Die zweite Zeile verwendet dieses Array, um die Stunden- und Minutendaten für alle Zeilen abzurufen, sodass die Daten gruppiert werden können (Dokumente) durch diese Werte.

  • Ich mag die Art und Weise, wie Sie einen anderen df zum Gruppieren verwenden. Ich hätte unnötigerweise Spalten erstellt.

    – Bonobos

    12. Oktober 20 um 14:35 Uhr

1642292049 351 Python Pandas Gruppieren Sie die datetime Spalte in Stunden und Minutenaggregationen
WillZ

Bin auf das gestoßen, als ich nach dieser Art von Groupby gesucht habe. Der obige Code von Wes hat bei mir nicht funktioniert, ich bin mir nicht sicher, ob es an Änderungen liegt pandas im Laufe der Zeit.

In pandas 0.16.2, was ich am Ende getan habe, war:

grp = data.groupby(by=[data.datetime_col.map(lambda x : (x.hour, x.minute))])
grp.count()

Sie hätten (Stunde, Minute) Tupel als gruppierten Index. Wenn Sie Multi-Index wünschen:

grp = data.groupby(by=[data.datetime_col.map(lambda x : x.hour),
                       data.datetime_col.map(lambda x : x.minute)])

Ich habe eine Alternative zu den Antworten von Wes & Nix oben, mit nur einer Codezeile, vorausgesetzt, Ihre Spalte ist bereits eine Datetime-Spalte, müssen Sie die Stunden- und Minutenattribute nicht separat abrufen:

df.groupby(df.timestamp_col.dt.time).value_col.sum()

.

498230cookie-checkPython Pandas: Gruppieren Sie die datetime-Spalte in Stunden- und Minutenaggregationen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy