2016-03-25 4 views
12

Я понимаю, что OHLC повторно выборки данных временных рядов в панд, используя один столбец данных, будет отлично работать, например, на следующей dataframe:агрегации Панды OHLC данных OHLC

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

Но что делать Я делаю, если данные уже находятся в формате OHLC? Из того, что я могу собрать метод OHLC в API вычисляет срез OHLC для каждого столбца, следовательно, если мои данные в формате:

   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 

При попытке повторно образца я получаю OHLC для каждого из колонны, как так:

     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 

есть быстрый (МОГ) обходной путь для этого, что кто-то готов поделиться, пожалуйста, без меня, чтобы получить по колено в панд руководстве?

Спасибо.

ps, ​​есть этот ответ - Converting OHLC stock data into a different timeframe with python and pandas - но это было 4 года назад, поэтому я надеюсь, что был некоторый прогресс.

ответ

19

Это похоже на ответ, который вы связали, но немного чище и быстрее, потому что он использует оптимизированные скопления, а не лямбды.

Обратите внимание, что для синтаксиса resample(...).agg(...) требуется pandas версия 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 
+0

Да, я пойду с этим; это означает обновление панд, но способ моей функции означает, что это предпочтительный вариант. Благодарю. – user3439187

+1

Любая идея, если бы я мог добавить метод fill_method = bfill'' в это решение для работы с NAN? – user3439187

+0

Забудьте об этом последнем вопросе, метод изменился на .bfill() – user3439187