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

Posted

技术标签:

【中文标题】如何在时间序列数据框中索引出每一天的第一行和最后一行?【英文标题】:How to index out the first and last row of each day in a time series dataframe? 【发布时间】:2021-04-09 16:05:20 【问题描述】:

所以我有一个包含分钟股票数据的 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,所以我试图找到一种方法来索引第一个和最后一个价格,无论何时。

【问题讨论】:

您只想查看 9:30 到 4:00 时间范围内的第一个和最后一个,还是想查看除此之外的所有内容? 我想查看 9:30 到 4:00 时间范围内的第一个和最后一个。 【参考方案1】:

使用 groupby:

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

【讨论】:

【参考方案2】:

如果上面的答案工作得更短,但我没有得到它的工作。

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,0))]

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

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

【讨论】:

以上是关于如何在时间序列数据框中索引出每一天的第一行和最后一行?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取给定记录组中每一天的最后一条记录?

如何在 pandas Dataframe KeyError: False 中索引出数字的值

如何在 PostgreSQL 中获取表的每一天的第一个日期并将其转换为 JSON

mysql数据库中sql语句取一段时间的每一天的最后一条数据?sql语句怎么写

在几天的持续时间内,选择表格中记录的每一天的最后一个条目

java怎么得到某个月的第一天和最后一天的日期,以2012-06为例