J'ai un tableau chronologique des pandas contenant des dates, des objets et des scores:
monthagg = df['score'].resample('H').sum().to_frame()
Je souhaite agréger le score par heure sans tenir compte de la date, le résultat souhaité est:
08:00:00 10 09:00:00 5 19:00:00 4
Donc, fondamentalement, je dois supprimer la date-mois-année, puis regrouper le score par heure,
J'ai essayé cette commande
datetime score 2018-11-23 08:33:02 4 2018-11-24 09:43:30 2 2018-11-25 08:21:34 5 2018-11-26 19:33:01 4 2018-11-23 08:50:40 1 2018-11-23 09:03:10 3
Ce qui fonctionne mais prend en compte la date-mois-année, Comment supprimer JJ-MM-AAAA et agréger par heure?
3 Réponses :
Configuration pour générer une image avec des objets datetime:
df["hour"] = df["date"].dt.hour
df.groupby("hour").sum()
Vous pouvez maintenant ajouter une colonne d'heure comme celle-ci, puis grouper par elle:
import datetime import pandas as pd rows = [datetime.datetime.now() + datetime.timedelta(hours=i) for i in range(100)] df = pd.DataFrame(rows,columns = ["date"])
Une solution possible est d'utiliser DatetimeIndex.floor pour définir les minutes et les secondes à 0 , puis convertir DatetimeIndex en chaînes par DatetimeIndex.strftime , puis agréger sum :
a = df.groupby(df.index.hour)['score'].sum() #if column datetime #a = df.groupby(df['datetime'].dt.hour)['score'].sum() print (a) datetime 8 10 9 5 19 4 Name: score, dtype: int64
Ou utilisez DatetimeIndex.hour et agréger sum:
a = df['score'].groupby(df.index.floor('H').strftime('%H:%M:%S')).sum()
#if column datetime
#a = df['score'].groupby(df['datetime'].dt.floor('H').dt.strftime('%H:%M:%S')).sum()
print (a)
08:00:00 10
09:00:00 5
19:00:00 4
Name: score, dtype: int64
8 10 9 5 19 4