2017-01-25 7 views
1

J'ai des données de séries chronologiques qui ressemblent à ceci:comment prendre moyenne des valeurs par trois jours dans une donnée timeseries

datetime | value 
2016-01-01 | 1 
2016-01-02 | 14 
2016-01-03 | 3 
2016-01-04 | 15 
2016-01-05 | 5 
2016-01-06 | 4 
2016-01-07 | 7 
2016-01-08 | 15 

Ce que je veux obtenir est la moyenne par trois jours (et selon une semaine) et de garder le dernier jour que l'indice comme celui-ci:

datetime | value 
2016-01-03 | 6 
2016-01-06 | 8 
2016-01-08 | 11 

Vous pouvez remarquer que les 2 enregistrements restants doivent être juste en moyenne. Existe-t-il une manière pratique de faire ceci dans les pandas dataframe ou graphlab SFrame? Si quelqu'un peut partager une ressource pertinente, ce serait génial!

J'apprécie toute aide!

Répondre

1

Vous pouvez utiliser agg par tableau numpy créé par division étage:

print (np.arange(len(df.index)) // 3) 
[0 0 0 1 1 1 2 2] 

df = df.groupby(np.arange(len(df.index)) // 3).agg({'datetime': 'last', 'value': 'mean'}) 
print (df) 
    datetime value 
0 2016-01-03  6 
1 2016-01-06  8 
2 2016-01-08  11 
1

tableau Numpy supporte la sélection même espace:

>>> import numpy as np 
>>> l = np.arange(10) 
>>> l 
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 
>>> l[0::3] 
array([0, 3, 6, 9]) 

Pandas série la plupart du support de temps caractéristiques NumPy. Dans votre cas, au lieu de l'index 0, passez de 0 à 2 pour que la boucle effectue le travail.