J'ai écrit cet article à partir de la motivation de "Je veux écrire dans les pandas le processus de création de fonctionnalités qui agrègent certaines colonnes tous les N jours, mais que dois-je faire?"
L'exemple de code est un extrait de Google Colony lié ci-dessous. GoogleColab --pandas × groupby × exemple Grouper
De plus, les données sont utilisées ici (kaggle Datasets --Bitcoin Historical Data).
Tout d'abord, c'est à partir du prétraitement des données, que la colonne Timestamp est convertie en type datetime pour le traitement précédent.
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
"""
Le problème est ** le processus de création de fonctionnalités en agrégeant certaines colonnes tous les N jours **, mais comme le titre l'indique, ** pandas x groupby x Grouper ** est utilisé. "Grouper par" est souvent utilisé lors du traitement d'agrégation, mais cette fois, c'est une erreur d'utiliser "Grouper" car nous voulons l'organiser tous les ** N jours ** et chaque cycle / section fixe. Puisqu'il est temps de résumer, si vous spécifiez la colonne Horodatage pour la clé Grouper et spécifiez freq = 'D', le processus de récapitulation chaque jour est terminé.
groupby_grouper
# freq='D'En le définissant sur, il peut être résumé au quotidien
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
"""
c'est tout.