高频DataFrame中实现当前价格与5分钟前收盘价差值计算
高频DataFrame计算与5分钟前分钟级收盘价的价格变动
需求说明
现有两个DataFrame:
- 高频数据
df:索引为datetime64类型,包含逐笔交易的Price等字段 - 分钟级数据
minute_df:索引为datetime64类型,包含每分钟的close收盘价
需要为df新增price_change列,规则为:
- 每行的
price_change= 当前行Price - 当前时间往前推5分钟对应的minute_df中的close价格 - 例:06:27时段的所有行,均引用06:22的close值计算;06:28时段则引用06:23的close值
- 若对应时间的close数据不存在,填充NaN
数据示例
高频数据df
TimeStamp Price Q hour min 2022-10-05 05:30:11.344618-05:00 8636 1 5 30 2022-10-05 05:30:12.647597-05:00 8637 1 5 30 2022-10-05 05:30:20.080559-05:00 8637 1 5 30 2022-10-05 05:30:21.267389-05:00 8637 2 5 30 2022-10-05 05:30:21.267952-05:00 8636 1 5 30
分钟级数据minute_df
TimeStamp open high low close 2022-10-05 05:30:00-05:00 8636 8645 8635 8645 2022-10-05 05:31:00-05:00 8645 8647 8637 8638 2022-10-05 05:32:00-05:00 8639 8650 8639 8649 2022-10-05 05:33:00-05:00 8648 8652 8648 8649
解决步骤
1. 确保索引为datetime类型
先确认两个DataFrame的索引是datetime64格式,如果原本是列的话,设置为索引:
import pandas as pd # 若df的TimeStamp是列,转为索引 if 'TimeStamp' in df.columns: df = df.set_index('TimeStamp') # 若minute_df的TimeStamp是列,转为索引 if 'TimeStamp' in minute_df.columns: minute_df = minute_df.set_index('TimeStamp')
2. 计算每行对应的目标查询时间
对df的每一行时间,计算往前推5分钟后的整点分钟时间(匹配minute_df的时间格式):
# 减去5分钟 target_times = df.index - pd.Timedelta(minutes=5) # 向下取整到分钟,得到对应的分钟级时间点 target_times = target_times.floor('min')
3. 匹配收盘价并计算价格变动
用计算出的target_times去minute_df中提取对应的close值,再计算价格变动:
# 映射获取5分钟前的收盘价,无对应数据则返回NaN df['prev_5min_close'] = target_times.map(minute_df['close']) # 计算price_change df['price_change'] = df['Price'] - df['prev_5min_close'] # 可选:删除中间辅助列prev_5min_close # df = df.drop('prev_5min_close', axis=1)
结果说明
以示例数据为例,df中所有行的时间是05:30左右,往前推5分钟后是05:25,而minute_df中没有05:25的close数据,因此所有行的price_change均为NaN,符合数据不足时填充NaN的要求。
内容的提问来源于stack exchange,提问作者skepticalforever
相关产品推荐
相关产品推荐

