ami*_*r92 5 python dataframe stock pandas
我有 2017 年到 2019 年的每分钟股票数据。我只想保留每天 9:16 之后的数据,因此我想将 9:00 到 9:16 之间的任何数据转换为 9:16 的值,即:
09:16 的值应该是
open :从 9:00 到 9:16 的第一个数据的值,这里是 116.00high : 最高值从 9:00 - 9:16,这里是 117.00low :最低值从 9:00 - 9:16,这里是 116.00close:这将是 9:16 的值,这里是 113.00 open high low close
date
2017-01-02 09:08:00 116.00 116.00 116.00 116.00
2017-01-02 09:16:00 116.10 117.80 117.00 113.00
2017-01-02 09:17:00 115.50 116.20 115.50 116.20
2017-01-02 09:18:00 116.05 116.35 116.00 116.00
2017-01-02 09:19:00 116.00 116.00 115.60 115.75
... ... ... ... ...
2029-12-29 15:56:00 259.35 259.35 259.35 259.35
2019-12-29 15:57:00 260.00 260.00 260.00 260.00
2019-12-29 15:58:00 260.00 260.00 259.35 259.35
2019-12-29 15:59:00 260.00 260.00 260.00 260.00
2019-12-29 16:36:00 259.35 259.35 259.35 259.35
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的:
#Get data from/to 9:00 - 9:16 and create only one data item
convertPreTrade = df.between_time("09:00", "09:16") #09:00 - 09:16
#combine modified value to original data
df.loc[df.index.strftime("%H:%M") == "09:16" ,
["open","high","low","close"] ] = [convertPreTrade["open"][0],
convertPreTrade["high"].max(),
convertPreTrade["low"].min(),
convertPreTrade['close'][-1] ]
Run Code Online (Sandbox Code Playgroud)
但这不会给我准确的数据
d = {'date': 'last', 'open': 'last',
'high': 'max', 'low': 'min', 'close': 'last'}
# df.index = pd.to_datetime(df.index)
s1 = df.between_time('09:00:00', '09:16:00')
s2 = s1.reset_index().groupby(s1.index.date).agg(d).set_index('date')
df1 = pd.concat([df.drop(s1.index), s2]).sort_index()
Run Code Online (Sandbox Code Playgroud)
使用DataFrame.between_time在数据帧过滤行df,时间介于09:00到09:16:
print(s1)
open high low close
date
2017-01-02 09:08:00 116.0 116.0 116.0 116.0
2017-01-02 09:16:00 116.1 117.8 117.0 113.0
Run Code Online (Sandbox Code Playgroud)
使用DataFrame.groupby到这组数据帧过滤s1的date和聚集使用字典d:
print(s2)
open high low close
date
2017-01-02 09:16:00 116.1 117.8 116.0 113.0
Run Code Online (Sandbox Code Playgroud)
用于DataFrame.drop从原始数据框中删除df时间之间的行09:00-09:16,然后用于pd.concat将其与 连接s2,最后用于DataFrame.sort_index对索引进行排序:
print(df1)
open high low close
date
2017-01-02 09:16:00 116.10 117.80 116.00 113.00
2017-01-02 09:17:00 115.50 116.20 115.50 116.20
2017-01-02 09:18:00 116.05 116.35 116.00 116.00
2017-01-02 09:19:00 116.00 116.00 115.60 115.75
2019-12-29 15:57:00 260.00 260.00 260.00 260.00
2019-12-29 15:58:00 260.00 260.00 259.35 259.35
2019-12-29 15:59:00 260.00 260.00 260.00 260.00
2019-12-29 16:36:00 259.35 259.35 259.35 259.35
2029-12-29 15:56:00 259.35 259.35 259.35 259.35
Run Code Online (Sandbox Code Playgroud)