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

Pandas日度OHLCV数据周度重采样:周索引设为该周首个存在交易日

通用方法:基于现有日度数据实现周度重采样并设置实际首个交易日为索引

无需依赖特定市场的交易日历,直接利用日度数据本身已过滤非交易日的特性,就能实现需求。以下提供两种实用方案:

方法一:直接分组聚合(推荐)

通过周分组直接锁定每组的首个交易日作为索引,一步完成聚合和索引设置,逻辑直观高效。

import pandas as pd

# 假设你的日度OHLCV数据DataFrame为df,索引是DatetimeIndex
# 生成唯一周分组键:(年份, ISO周数),避免跨年周的歧义
df['year_week'] = df.index.to_series().apply(lambda dt: (dt.isocalendar().year, dt.isocalendar().week))

# 分组聚合OHLCV指标,同时提取每组首个交易日作为最终索引
weekly_df = df.groupby('year_week').agg(
    Open=('Open', 'first'),
    High=('High', 'max'),
    Low=('Low', 'min'),
    Close=('Close', 'last'),
    Volume=('Volume', 'sum')
)

# 将分组键替换为每组的首个交易日日期
weekly_df.index = df.groupby('year_week').apply(lambda group: group.index[0])

# 可选:删除临时生成的year_week列
df.drop('year_week', axis=1, inplace=True)

优势:

  • 完全基于现有日度数据,适配所有市场
  • 避免重采样后再修正索引的额外步骤,代码简洁

方法二:重采样后修正索引

若习惯使用resample先完成聚合,再修正索引到实际首个交易日:

import pandas as pd

# 先按周重采样(这里用W-MON锚定周一,可根据市场周起始调整为W-SUN等)
weekly_resampled = df.resample('W-MON').agg(
    Open=('Open', 'first'),
    High=('High', 'max'),
    Low=('Low', 'min'),
    Close=('Close', 'last'),
    Volume=('Volume', 'sum')
)

# 提取日度数据的索引数组,用于快速查找
daily_dates = df.index.values

# 定义函数:找到给定周起始日对应的首个实际交易日
def map_to_first_trading_day(week_start):
    # 筛选日度数据中 >= 该周起始日的所有日期,取第一个
    valid_dates = daily_dates[daily_dates >= week_start]
    return valid_dates[0] if len(valid_dates) > 0 else week_start

# 修正周度索引
weekly_resampled.index = weekly_resampled.index.map(map_to_first_trading_day)

优势:

  • 保留resample的使用习惯,适合熟悉该方法的用户
  • 同样不依赖外部交易日历,仅基于现有有效交易日数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 06:05:22