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