如何从DataFrame中为盘后数据分组查找下一个可用日期
解决方案
步骤1:提取并排序所有唯一交易日
先从原始分钟级数据中提取所有实际存在的交易日,去重后排序,自动排除节假日和无数据日期:
# 提取唯一交易日并排序,确保date列为datetime64类型 unique_dates = minuteData['date'].drop_duplicates().sort_values().reset_index(drop=True)
步骤2:构建「当前日期→下一个交易日」映射字典
基于排序后的交易日序列,为每个日期匹配对应的下一个有效交易日:
# 创建映射字典:key为当前日期,value为下一个有数据的交易日 next_date_map = {} for i in range(len(unique_dates)-1): current_date = unique_dates[i] next_date = unique_dates[i+1] next_date_map[current_date] = next_date # 处理序列最后一个日期(可根据业务调整,此处设为自身) last_date = unique_dates.iloc[-1] next_date_map[last_date] = last_date
步骤3:生成适配节假日的new date列
根据盘后时段规则,结合映射字典生成正确的关联交易日:
import pandas as pd def get_new_date(row): if row['times'] > pd.Timestamp('15:59').time(): # 16:00之后的盘后数据,关联下一个交易日 return next_date_map[row['date']] else: # 9:30之前的盘前数据,关联当前交易日 return row['date'] # 应用函数生成new date列 NonMarketHours['new date'] = NonMarketHours.apply(get_new_date, axis=1)
步骤4:分组计算盘后时段最值
沿用你原有的分组逻辑,此时new date已自动适配所有节假日:
PMData = NonMarketHours.groupby('new date').agg({'low': 'min', 'high': 'max'})[['low', 'high']].reset_index()
关键说明
- 该方案完全依赖数据中实际存在的日期,无需手动维护节假日列表
- 确保
minuteData['date']为datetime64类型,若为字符串需先转换:minuteData['date'] = pd.to_datetime(minuteData['date']) - 最后一个日期的处理可根据业务需求调整(如设为
None或抛出提示)
内容的提问来源于stack exchange,提问作者svlad
相关产品推荐
相关产品推荐

