2015-02-03 9 views
5

Jestem nowym w Pandasie seriami czasowymi i ramkami danych i staram się wykonać to proste zadanie. Mam zestaw danych "dane" (1-wymiarowa tablica float32-Numpy) dla każdego dnia od 1/1/2004 - 12/31/2008. Daty są przechowywane jako lista datetime obiektów "dat". Zasadniczo chciałbym obliczyć pełny "standardowy rok" - średnią wartość każdego dnia wszystkich lat (1-365). Zacząłem od tego podobnego (?) Pytania (Getting the average of a certain hour on weekdays over several years in a pandas dataframe), ale nie udało się uzyskać pożądanego wyniku - szeregu czasowego 365 "przeciętnych" dni, np. średnia z wszystkich czterech z dniem 1 stycznia roku, 2 stycznia w ...Zdobądź średni rok (średnia dni w ciągu wielu lat) w Pandach

Mały przykład skrypt:

import numpy as np 
import pandas as pd 
import datetime 

startdate = datetime.datetime(2004, 1, 1) 
enddate = datetime.datetime(2008, 1, 1) 
days = (enddate + datetime.timedelta(days=1) - startdate).days 
data = np.random.random(days) 
dates = [startdate + datetime.timedelta(days=x) for x in range(0, days)] 

ts = pd.Series(data, dates) 
test = ts.groupby(lambda x: (x.year, x.day)).mean() 

Odpowiedz

6

Grupa przez miesiąca i dzień, a nie rok i dzień:

test = ts.groupby([ts.index.month, ts.index.day]).mean() 

plony

1 1  0.499264 
    2  0.449357 
    3  0.498883 
... 
12 17 0.408180 
    18 0.317682 
    19 0.467238 
...  
    29 0.413721 
    30 0.399180 
    31 0.828423 
Length: 366, dtype: float64 
+0

To było szybkie i łatwe - dziękujemy! – HyperCube

+0

Dzięki, szukałem dość czasu na to :) –

Powiązane problemy