2013-02-15 11 views
8

Chciałbym utworzyć wiele kolumn podczas resampling pandas DataFrame podobnie jak wbudowana metoda ohlc.Tworzenie wielu kolumn w funkcji agregacji pand

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

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

Dies z

Exception: Must produce aggregated value 

jakieś sugestie? Dzięki!

Odpowiedz

8

można przekazać słownika funkcji do sposobu 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 

Tworzenie słownika funkcji:

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

Pass słownika do parametru how z 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

Około 10 razy szybciej używać "" m ean "' niż używać 'np.mean'. To samo dotyczy ''min' i 'max'' –

+2

Czy istnieje sposób określenia wartości domyślnej dla większości kolumn (np.' Sum' zamiast 'mean'), a następnie zastąpić metodę dla pojedynczej kolumny? –

+0

Sprytna sztuczka: możesz nawet przekazać słownik (dla kolumn) słownika funkcji, jak w przykładzie: 'mhl = {'data_column_1': {'resultA': np.mean, 'resultB': max}, 'data_column_2' : {'resultC': min, 'resultD': sum}} ' –