Слияние исторических и реальных данных о ценах на акции в пандах - PullRequest
1 голос
/ 30 октября 2019

Сначала я создаю кадр данных Pandas, содержащий исторические 1-минутные данные OHLCV за день, например:

                    open    high    low close   volume
date                    
2019-10-30 07:55:00 3034.00 3034.25 3033.75 3034.00 209
2019-10-30 07:56:00 3034.00 3034.25 3033.75 3034.00 315
2019-10-30 07:57:00 3034.25 3034.50 3033.75 3034.25 432
2019-10-30 07:58:00 3034.00 3034.25 3033.75 3033.75 329
2019-10-30 07:59:00 3034.00 3034.25 3033.75 3034.00 231

В следующий момент я подписываюсь на канал живого тика, используя класс слушателя, и повторно делаю это в постоянно обновляемомКадр данных OHLCV за 1 мин, например:

                    open    high    low close   volume
date                    
2019-10-30 07:59:00 3033.75 3034.00 3033.75 3034.00 35
2019-10-30 08:00:00 3033.75 3034.25 3033.25 3033.75 117
2019-10-30 08:01:00 3033.75 3034.00 3033.75 3034.00 78

Как объединить эти два, чтобы каждая новая строка живых данных (тики с повторной выборкой в ​​строки 1 мин) добавлялась к историческим данным? Другой проблемой является совпадение между последней минутой исторических данных и первой минутой живых данных - их необходимо объединить.

Ответы [ 2 ]

0 голосов
/ 30 октября 2019
# isolate the new indexes, (present in live_df but not in hist_df)
new_locs = ~live_df.index.isin(hist_df.index)

# append just the new entries in the live_df
new_df = hist_df.append(live_df.loc[new_locs])

Если ваша история увеличивается исключительно долго, это может замедлиться со временем. Если вы сохраняете свой фрейм данных отсортированным по возрастанию, вы можете упростить проверку new_locs, чтобы просматривать только самые последние несколько строк. с .iloc()

0 голосов
/ 30 октября 2019

Первое использование:

for i in live_df.index:
    if i in historical_df.index:
        new_live_df = live_df.drop(i)

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

Затем используйте:

df_total = historical_df.append(new_live_df)
...