2016-03-03 2 views
2

У меня есть DataFrame с индексом datetime и ценой. Мне нужны данные ohlc. (открытый, высокий, низкий, закрытый)Pandas: Получить данные ohlc для каждой строки

Я хочу переделать этот информационный кадр на заданную частоту в каждой строке.

frame.resample('60S', how = 'ohlc') работает, но теперь индексы dataframe расположены на расстоянии 60 секунд друг от друга. Я хочу пересменить каждую строку из предыдущих строк в 60-х. (12, если индексы 5s друг от друга). Таким образом, у меня могут быть значения ohlc для каждой строки исходного фрейма.

Я не думаю, что я хочу сделать с df.resample, но возможно с .agg или .map?

Как получить данные ohlc для каждые строка?

n = 10000 

prices = np.linspace(100.0, 103.0, n) + np.random.normal(0.0, 0.3, n) 
f = pd.DataFrame({'price': prices}, index = pd.date_range(end = datetime.utcnow(), freq = '5S', periods = n)) 

ohlcized = f.resample('60S', how = 'ohlc') # resampling doesnt work (834 != 10000) 
len(ohlcized) # 834 
len(f) # 10000 

if len(ohlcized) == len(f): 
    print "question answered" 
+0

Могли бы вы предоставить некоторые данные? – Alexander

+0

Готово. Если вам нужно, чтобы я уточнил больше, я могу. Проблема заключается в том, что повторная выборка удаляет строки. Я хочу сохранить все данные и просто выполнить операцию «ohlc» в каждой строке за последние 60 секунд данных. –

ответ

2

Для равноотстоящих временных меток:

bars = 12 
df = pd.concat([f.shift(bars - 1), pd.rolling_max(f, bars), pd.rolling_min(f, bars), f], 
       axis=1) 
df.columns = ['Open', 'High', 'Low', 'Close'] 

>>> df.tail() 
            Open  High   Low  Close 
2016-03-03 19:20:49.336236 102.510446 103.603518 102.438872 102.810945 
2016-03-03 19:20:54.336236 102.916919 103.603518 102.438872 103.072880 
2016-03-03 19:20:59.336236 103.603518 103.603518 102.438872 103.290665 
2016-03-03 19:21:04.336236 102.966331 103.290665 102.438872 103.095781 
2016-03-03 19:21:09.336236 102.438872 103.409546 102.438872 103.409546 
+0

roll_min и roll_max следует переключать –

+0

Исправлено. Благодарю. – Alexander

Смежные вопросы