with valid tseries timedeltaindex resample rangeindex periodindex only got datetimeindex but python python-2.7 pandas dataframe resampling

python - valid - resample matlab



Pandas OHLC agregaciĆ³n en datos OHLC (2)

Esto es similar a la respuesta que vinculó, pero es un poco más limpio y más rápido, ya que utiliza las agregaciones optimizadas, en lugar de las lambdas.

Tenga en cuenta que la sintaxis resample(...).agg(...) requiere pandas versión 0.18.0 .

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

Entiendo que el re-muestreo OHLC de datos de series de tiempo en Pandas, usando una columna de datos, funcionará perfectamente, por ejemplo en el siguiente marco de datos:

>>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 ...

Pero, ¿qué hago si los datos ya están en un formato OHLC? De lo que puedo recopilar, el método OHLC de la API calcula un segmento OHLC para cada columna, por lo tanto, si mis datos están en el formato:

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

Cuando intento volver a muestrear, obtengo un OHLC para cada una de las columnas, así:

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

¿Hay una solución rápida (ish) para esto que alguien esté dispuesto a compartir, por favor, sin que tenga que meterme hasta las rodillas en el manual de pandas?

Gracias.

ps, hay una respuesta: convertir datos de stock de OHLC en un período de tiempo diferente con python y pandas , pero fue hace 4 años, así que espero que haya habido algún progreso.


Necesitas usar un OrderedDict para mantener el orden de las filas en las versiones más nuevas de pandas, así:

import pandas as pd from collections import OrderedDict df[''ctime''] = pd.to_datetime(df[''ctime''], unit=''s'') df = btceur.set_index(''ctime'') df = df.resample(''5Min'').agg( OrderedDict([ (''open'', ''first''), (''high'', ''max''), (''low'', ''min''), (''close'', ''last''), (''volume'', ''sum''), ]) )