3
votes

Comment agréger une série chronologique de dates de pandas uniquement par heure

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?


0 commentaires

3 Réponses :


2
votes

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"])


0 commentaires

3
votes

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


0 commentaires

1
votes
8   10
9   5
19  4

0 commentaires