Ich schrieb diesen Artikel aus der Motivation von "Ich möchte in Pandas den Prozess des Erstellens von Features schreiben, die bestimmte Spalten alle N Tage aggregieren, aber was soll ich tun?"
Der Beispielcode ist ein Auszug aus der unten verlinkten Google Colony. GoogleColab - Pandas × Groupby × Grouper-Beispiel
Außerdem werden hier die Daten verwendet (kaggle Datasets --Bitcoin Historical Data).
Zunächst wird aus der Vorverarbeitung von Daten die Zeitstempelspalte für die vorherige Verarbeitung in den Datums- / Uhrzeittyp konvertiert.
load_dataset
import pandas as pd
btc = pd.read_csv("/content/bitstampUSD_1-min_data_2012-01-01_to_2019-08-12.csv")
btc[btc.columns.values] = btc[btc.columns.values].ffill()
# https://stackoverflow.com/questions/19231871/convert-unix-time-to-readable-date-in-pandas-dataframe
btc["Timestamp"] = pd.to_datetime(btc["Timestamp"], unit='s')
btc.head()
"""
Timestamp Open High Low Close Volume_(BTC) Volume_(Currency) Weighted_Price
0 2011-12-31 07:52:00 4.39 4.39 4.39 4.39 0.455581 2.0 4.39
1 2011-12-31 07:53:00 4.39 4.39 4.39 4.39 0.455581 2.0 4.39
2 2011-12-31 07:54:00 4.39 4.39 4.39 4.39 0.455581 2.0 4.39
3 2011-12-31 07:55:00 4.39 4.39 4.39 4.39 0.455581 2.0 4.39
4 2011-12-31 07:56:00 4.39 4.39 4.39 4.39 0.455581 2.0 4.39
"""
Das Problem ist ** der Prozess des Erstellens von Features, die bestimmte Spalten alle N Tage aggregieren **, aber wie der Titel schon sagt, wird ** pandas x groupby x Grouper ** verwendet. "Gruppieren nach" wird häufig verwendet, wenn eine Aggregationsverarbeitung durchgeführt wird. Diesmal ist es jedoch ein Fehler, "Grouper" zu verwenden, da wir es alle ** N Tage ** und jeden festen Zyklus / Abschnitt organisieren möchten. Da es Zeit zum Zusammenfassen ist, ist der Vorgang des Zusammenfassens jeden Tages abgeschlossen, wenn Sie die Spalte Zeitstempel für den Grouper-Schlüssel angeben und freq = 'D' angeben.
groupby_grouper
# freq='D'Durch Einstellen auf kann es täglich zusammengefasst werden.
btc.groupby(pd.Grouper(key='Timestamp', freq='D')).mean()
"""
Open High Low Close Volume_(BTC) Volume_(Currency) Weighted_Price
Timestamp
2011-12-31 4.472552 4.472624 4.472552 4.472624 7.590527 34.069690 4.472579
2012-01-01 4.680778 4.680778 4.680778 4.680778 5.861697 27.856539 4.680778
2012-01-02 5.000000 5.000000 5.000000 5.000000 11.566478 57.832389 5.000000
2012-01-03 5.145917 5.145917 5.145917 5.145917 13.506125 68.725391 5.145917
2012-01-04 5.176708 5.228729 5.176708 5.228729 17.221039 91.624089 5.195443
... ... ... ... ... ... ... ...
2019-08-08 11802.176188 11809.075389 11794.541660 11802.534583 7.059914 83271.678234 11801.428490
2019-08-09 11820.325465 11826.872431 11813.188132 11820.873674 5.099464 60251.317095 11819.498275
2019-08-10 11582.574299 11587.521007 11576.103201 11582.249007 5.219845 60211.963986 11581.356693
2019-08-11 11378.198736 11382.765819 11373.714118 11379.078882 3.062079 34822.593814 11378.195194
2019-08-12 11527.440000 11551.570000 11520.000000 11520.000000 23.805939 274731.256920 11540.450291
2782 rows × 7 columns
"""
das ist alles.