我有一个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
型
明显的是开闭高低
1条答案
按热度按时间thtygnil1#
IIUC,在
groupby
中,你可以通过'tickker',但也可以使用pd.Grouper
上的'时间',频率为5分钟。在agg
方法中,可以使用since pandas>0.25pd.NamedAgg
,其中first
表示open,last
表示close,max
表示high,min
表示low。字符串
对于用plotly绘制烛台,您可以这样做:
型