You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas时间序列分钟级补缺口避免生成非交易日数据的实现方法

解决思路

核心逻辑是按原始数据中存在的交易日分组处理,仅对有交易数据的日期单独做分钟级重采样,从根源上避免生成非交易日数据,同时大幅降低运算量。

实现代码

import pandas as pd

# 1. 先将时间列转为datetime格式,若时间列实际名为Exchange DateTime,替换此处的Timestamp即可
df['Timestamp'] = pd.to_datetime(df['Timestamp'])

# 2. 按日期分组,每个交易日单独处理重采样和过滤
df_output = df.groupby(df['Timestamp'].dt.date, group_keys=False).apply(
    lambda day_df: day_df.set_index('Timestamp')
                    # 单天内按1分钟重采样,前向填充
                    .resample('1T').ffill()
                    # 仅保留09:30-16:00的时间区间
                    .between_time('09:30:00', '16:00:00')
).reset_index()

# 可选逻辑:如果需要保留原始数据中早于09:30的交易记录,可改用下方逻辑替换group内的处理:
# df_output = df.groupby(df['Timestamp'].dt.date, group_keys=False).apply(
#     lambda day_df: 
#         # 合并原始早于09:30的记录 + 09:30-16:00填充后的记录
#         pd.concat([
#             day_df[day_df['Timestamp'].dt.time < pd.to_datetime('09:30:00').time()].set_index('Timestamp'),
#             day_df.set_index('Timestamp').resample('1T').ffill().between_time('09:30:00', '16:00:00')
#         ]).sort_index()
# ).reset_index()

方案优势

  • 完全避免生成非交易日数据:仅处理原始数据中存在的日期,不会生成2021-02-08这类无交易的日期数据,符合需求。
  • 执行效率极高:单天内重采样最多生成390条(09:30到16:00共390分钟)数据,不需要全局生成跨多年的全量分钟级时间戳,处理多年交易数据也不会有性能问题。

内容的提问来源于stack exchange,提问作者Chris Bauer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 21:54:00