2013-02-15 16 views
8

Vorrei creare più colonne durante il resampling di un DataFrame panda come il metodo ohlc incorporato.Creazione di più colonne nella funzione di aggregazione dei panda

def mhl(data): 
    return pandas.Series([np.mean(data),np.max(data),np.min(data)],index = ['mean','high','low']) 

ts.resample('30Min',how=mhl) 

muore con

Exception: Must produce aggregated value 

Qualche suggerimento? Grazie!

risposta

8

È possibile passare un dizionario di funzioni al metodo resample:

In [35]: ts 
Out[35]: 
2013-01-01 00:00:00  0 
2013-01-01 00:15:00  1 
2013-01-01 00:30:00  2 
2013-01-01 00:45:00  3 
2013-01-01 01:00:00  4 
2013-01-01 01:15:00  5 
... 
2013-01-01 23:00:00 92 
2013-01-01 23:15:00 93 
2013-01-01 23:30:00 94 
2013-01-01 23:45:00 95 
2013-01-02 00:00:00 96 
Freq: 15T, Length: 97 

creare un dizionario di funzioni:

mhl = {'m':np.mean, 'h':np.max, 'l':np.min} 

Passare il dizionario al parametro how di resample:

In [36]: ts.resample("30Min", how=mhl) 
Out[36]: 
         h  m l 
2013-01-01 00:00:00 1 0.5 0 
2013-01-01 00:30:00 3 2.5 2 
2013-01-01 01:00:00 5 4.5 4 
2013-01-01 01:30:00 7 6.5 6 
2013-01-01 02:00:00 9 8.5 8 
2013-01-01 02:30:00 11 10.5 10 
2013-01-01 03:00:00 13 12.5 12 
2013-01-01 03:30:00 15 14.5 14 
+2

È circa 10 volte più veloce da usare '" m ean "" che usare 'np.mean'. Lo stesso vale per "min" e "max" –

+2

Esiste un modo per specificare un valore predefinito per la maggior parte delle colonne (ad esempio, 'sum' invece di' mean') e quindi sovrascrivere il metodo per una singola colonna? –

+0

Neat trick: puoi anche passare un dizionario (per le colonne) del dizionario delle funzioni, in questo modo: 'mhl = {'data_column_1': {'resultA': np.mean, 'resultB': max}, 'data_column_2' : {'resultC': min, 'resultD': sum}} ' –

Problemi correlati