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''),
])
)