Concat, Groupby и sum() panda

#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)