微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何索引时间序列数据框中每天的第一行和最后一行?

如何解决如何索引时间序列数据框中每天的第一行和最后一行?

所以我有一个包含分钟股票数据的 csv 文件代码如下所示:

d = pd.read_csv('/Volumes/Seagate Portable/usindex_2020_all_tickers_awvbxk9/SPX_2020_2020.txt')
d.columns = ['Dates','Open','High','Low','Close']
d.set_index('Dates',inplace=True)
d.drop(['High','Low'],axis=1,inplace=True)
d = d.between_time('9:30','16:00')

所以每个索引都有年、日、月和时间。我想要做的是使用日期,在 9:30 和 4:00 之间索引当天的第一个和最后一个报价。

输出如下:

    Open    Close
Dates       
2020-01-02 09:31:00 3247.19 3245.22
2020-01-02 09:32:00 3245.07 3244.66
2020-01-02 09:33:00 3244.89 3247.61
2020-01-02 09:34:00 3247.38 3246.92
2020-01-02 09:35:00 3246.89 3249.09
... ... ...
2020-12-24 13:17:00 3703.06 3703.06
2020-12-24 13:18:00 3703.06 3703.06
2020-12-24 13:19:00 3703.06 3703.06
2020-12-24 13:20:00 3703.06 3703.06
2020-12-24 14:22:00 3703.06 3703.06

代码所示,第一个和最后一个价格并不总是 9:30 和 4:00,所以我试图找到一种方法,无论何时都可以索引第一个和最后一个价格。

解决方法

使用 groupby:

d = d.between_time('9:30','16:00')
d.groupby(pd.Grouper(freq='D')).agg({'Open':'first','Close':'last'})
,

如果上面的答案有效,它会更短,但我没有让它起作用。

import datetime as dt

d = pd.DataFrame({'Dates': ['2020-01-02 09:15:00','2020-01-02 09:31:00','2020-01-02 09:32:00','2020-01-02 09:33:00','2020-01-02 09:34:00','2020-01-03 09:35:00','2020-01-03 16:00:00'],'Open': [3247.19,3247.19,3245.07,3244.89,3247.38,3246.89,3247.19],'Close': [3245.22,3245.22,3244.66,3247.61,3246.92,3249.09,3245.22]})
# df['Dates'].astype('datetime64[ns]')
d['Dates']=d['Dates']

d['Dates'] = pd.to_datetime(d['Dates'])
d['just_date'] = d['Dates'].dt.date
d['just_time'] = d['Dates'].dt.time
d2=df[(d['just_time'] >= dt.time(9,30,0)) & (d['just_time'] <= dt.time(16,0))]

dmins=df.groupby('just_date').min()
dmaxs=df.groupby('just_date').max()

d2=dfmins.append(dfmaxs)
d2.sort_index(inplace=True)
d2

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。