2016-03-25 9 views
12

Ich verstehe, dass EHTS- Resampling von Zeitreihendaten in Pandas, unter Verwendung einer Datenspalte wird perfekt funktionieren, zum Beispiel auf dem folgenden Datenrahmen:Pandas EHTS- Aggregation auf EHTS- Daten

>>df 
ctime  openbid 
1443654000 1.11700 
1443654060 1.11700 
... 

df['ctime'] = pd.to_datetime(df['ctime'], unit='s') 
df   = df.set_index('ctime') 
df.resample('1H', how='ohlc', axis=0, fill_method='bfill') 


>>> 
        open  high  low  close 
ctime             
2015-09-30 23:00:00 1.11700 1.11700 1.11687 1.11697 
2015-09-30 24:00:00 1.11700 1.11712 1.11697 1.11697 
... 

Aber was tun Ich mache, wenn die Daten bereits in einem OHLC-Format vorliegen? Von dem, was ich die EHTS- Methode des API sammeln für jede Spalte eine EHTS- Scheibe berechnet, also, wenn meine Daten im Format ist:

   ctime openbid highbid lowbid closebid 
0  1443654000 1.11700 1.11700 1.11687 1.11697 
1  1443654060 1.11700 1.11712 1.11697 1.11697 
2  1443654120 1.11701 1.11708 1.11699 1.11708 

Wenn ich versuche, wieder Probe I für jede der einen EHTS- erhalten Spalten, etwa so:

     openbid        highbid   \ 
         open  high  low close  open  high 
ctime                  
2015-09-30 23:00:00 1.11700 1.11700 1.11700 1.11700 1.11700 1.11712 
2015-09-30 23:01:00 1.11701 1.11701 1.11701 1.11701 1.11708 1.11708 
... 
             lowbid        \ 
         low close  open  high  low close 
ctime                  
2015-09-30 23:00:00 1.11700 1.11712 1.11687 1.11697 1.11687 1.11697 
2015-09-30 23:01:00 1.11708 1.11708 1.11699 1.11699 1.11699 1.11699 
... 

        closebid        
         open  high  low close 
ctime              
2015-09-30 23:00:00 1.11697 1.11697 1.11697 1.11697 
2015-09-30 23:01:00 1.11708 1.11708 1.11708 1.11708 

gibt es eine schnelle (ish) Abhilfe für dieses, dass jemand bereit ist, bitte zu teilen, ohne dass ich knietief in Pandas Handbuch erhalten haben?

Danke.

ps, ​​gibt es diese Antwort - Converting OHLC stock data into a different timeframe with python and pandas - aber es war vor 4 Jahren, so hoffe ich, es gab einige Fortschritte.

Antwort

19

Dies ist ähnlich wie die Antwort, die Sie verknüpft haben, aber es ist ein wenig sauberer und schneller, weil es die optimierten Aggregationen statt Lambda verwendet.

Beachten Sie, dass die Syntax resample(...).agg(...) Pandas Version 0.18.0 erfordert.

In [101]: df.resample('1H').agg({'openbid': 'first', 
           'highbid': 'max', 
           'lowbid': 'min', 
           'closebid': 'last'}) 
Out[101]: 
         lowbid highbid closebid openbid 
ctime             
2015-09-30 23:00:00 1.11687 1.11712 1.11708 1.117 
+0

Ja, ich werde mit diesem gehen; es bedeutet, Pandas zu aktualisieren, aber die Art und Weise, wie meine Funktion ging, bedeutet, dass dies die bevorzugte Option ist. Vielen Dank. – user3439187

+1

Irgendeine Idee, wenn ich die 'fill_method = 'bfill'-Methode in diese Lösung hinzufügen könnte, um mit den NANs umzugehen? – user3439187

+0

Vergiss diese letzte Frage, die Methode hat sich in .bfill() geändert. – user3439187