#python #numpy #pandas
#python #numpy #панды
Вопрос:
У меня есть некоторые данные OHLC с временной меткой, которые я пытаюсь воссоздать несжатый фрейм данных с высоким и низким значениями путем итерации по исходному фрейму данных OHLC.
Фрейм данных OHLC выглядит следующим образом:
open high low close index1 r1 TPO
timestamp
2014-05-07 09:30:00 187.40 187.62 187.16 187.16 0 0.46 NA
2014-05-07 10:00:00 186.96 187.32 186.13 186.18 1 1.19 NA
2014-05-07 10:30:00 186.47 186.90 186.47 186.88 2 0.43 NA
2014-05-07 11:00:00 186.78 186.97 186.67 186.68 3 0.30 NA
2014-05-07 11:30:00 186.85 187.69 186.85 187.69 4 0.84 NA
Идея здесь состоит в том, чтобы воссоздать каждую строку в строке и создать фрейм данных заполненного диапазона. для каждой строки я вызываю функцию, чтобы воссоздать заполненный диапазон для строки i. это отлично работает и создает и возвращает фрейм данных строки в x1 или x2.
Затем я хочу добавить, объединить фрейм данных с предыдущим в кумулятивной функции concat..Похоже, он также делает это правильно
def TPOprint(low,high,tick):
range=np.arange(low,high,tick)
p1=pd.DataFrame({'Price':range,'Count':np.ones(len(range),dtype=np.int)},index=range)
return p1
for i, row in bars.iterrows():
if counter>0:
low=bars.low[i]
high=bars.high[i]
x2=TPOprint(low,high,tick_size)
if x2.empty:
print('DataFrame is empty! Skipped ', bars.index1[i])
TPOtemp=pd.concat([x1,x2])
x1=TPOtemp
TPO=x1.groupby(x1.index)
g=TPO.sum()
Наконец, после завершения всех конкатенаций я хочу сгруппировать по цене и получить сумму подсчета по каждой цене… вот где действительно возникает проблема. Несмотря на то, что я выполняю group by, повторяющиеся цены не объединяются, и поэтому суммирование не происходит. Вы можете видеть, что приведенный ниже вывод неверен. Я застрял и не понимаю, почему.
В конечном итоге я хочу выполнить гистограммы для этих данных, поэтому, если кто-нибудь знает, почему это происходит, я был бы признателен.
Count Price
186.46 1 186.46
186.47 1 186.47
186.47 1 186.47
186.48 1 186.48
186.48 1 186.48
186.49 1 186.49
186.49 1 186.49
186.50 1 186.50
186.50 1 186.50
186.51 1 186.51
186.51 1 186.51
186.52 1 186.52
186.52 1 186.52
186.53 1 186.53
186.53 1 186.53
186.54 1 186.54
186.54 1 186.54
186.55 1 186.55
186.55 1 186.55
186.56 1 186.56
186.56 1 186.56
186.56 1 186.56
186.57 1 186.57
186.57 1 186.57
Комментарии:
1. Что такое tick_size?
2. Ваша
tick_size
переменная, похоже, не определена. Кроме того,np.arange(low,high,tick)
это означало бы, что цена равномерно распределяется между самой низкой и самой высокой ценой, что, я думаю, вряд ли верно.3. tick_size равен .01 .. цена равномерно распределяется в зависимости от частоты дискретизации и не влияет на вычисление. Это ничем не отличается от диапазона, пройденного за «n» минут OHLC candletick.
4. Я не могу воспроизвести, может быть, в ваших значениях не отображается больше десятичных знаков? Может быть, попробовать
df[['open','high','low','close']] = np.round(df[['open','high','low','close']], 2)