У меня есть DataFrame, который содержит данные о запасах со следующими столбцами:
time ticker price
0 2020-04-02 09:30:35 EV 33.860
1 2020-04-02 09:00:00 AMG 60.430
2 2020-04-02 09:30:35 AMG 60.750
3 2020-04-02 09:00:00 BLK 455.350
4 2020-04-02 09:30:35 BLK 451.514
... ... ... ...
502596 2020-04-02 13:00:56 TLT 166.450
502597 2020-04-02 13:00:56 VXX 47.150
502598 2020-04-02 13:00:56 TSLA 529.800
502599 2020-04-02 13:00:56 BIDU 103.500
502600 2020-04-02 13:00:56 ON 12.700
Его данные о ценах акций за каждые 20 секунд для нескольких сотен акций. Я поместил столбец времени в формат datetime.
Отсюда мне нужно разделить данные на 5-минутные интервалы, а затем нанести на график данные, которые я сделал, используя:
out = df.groupby("ticker")\
.apply(lambda x: x.set_index("time")\
.resample("5T")\
.first()\
.reset_index())\
.reset_index(drop=True)
dffinal = out.dropna(axis=0)
def plot_tick(data, ticker):
ts = data[data["ticker"]==ticker].reset_index(drop=True)
ts.plot(x="time", y="price",title=ticker,figsize=(20,20),kind='line')
plot_tick(dffinal, "A")
График хорошо выглядит, но проблема в том, что мне нужны цены максимума, минимума, открытия и закрытия для каждого 5-минутного интервала для каждой акции. Мне это нужно для того, чтобы создать график свечи, что я легко могу сделать, когда у меня есть столбцы максимума, минимума, открытия и закрытия.
Открытие и закрытие - это цена в начале и в конце 5 минутный период соответственно. Столбец максимумов и минимумов - это максимальная цена за интервал и минимальная цена за интервал соответственно.
Итак, я ищу и конечный результат так:
time ticker price open close high low
0 2020-04-02 09:00:00 A 72.6700
6 2020-04-02 09:30:00 A 72.1400
7 2020-04-02 09:35:00 A 72.5400
8 2020-04-02 09:40:00 A 72.4000
9 2020-04-02 09:45:00 A 72.3338
... ... ... ...
38895 2020-04-02 12:40:00 ZUMZ 17.6000
38896 2020-04-02 12:45:00 ZUMZ 17.6300
38897 2020-04-02 12:50:00 ZUMZ 17.6000
38898 2020-04-02 12:55:00 ZUMZ 17.7400
38899 2020-04-02 13:00:00 ZUMZ 17.560
с заполнением открытия, закрытия, максимума и минимума, очевидно.