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

Pandas Python3时间序列重采样问题:日频转周频获取真实开盘价

解决日频转周频获取每周首个交易日开盘价的问题

我太懂这种挫败感了——本来想把日度行情数据转成周度,要的是每周第一个交易日的真实开盘价,结果用mean()算出一堆平均数值完全不是想要的,还碰到看不懂的报错,查文档也没找到关键点对吧?别担心,这就给你把问题拆解清楚,一步一步解决。

核心问题:为什么mean()不对?

你用df.resample('W').mean()得到的是整周每日开盘价的算术平均值,这显然不是你要的“每周第一个交易日的开盘价”——我们需要的是取每组(每周)的第一个值,而不是求平均。

正确的实现步骤

1. 确保你的数据索引是DatetimeIndex

这是resample能正常工作的前提,如果你的日期是普通列,先转成时间索引:

import pandas as pd

# 假设你的日期列名为'date'
df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)

如果这一步没做,resample大概率会报错(比如提示无法识别时间维度),这可能就是你碰到报错的原因之一。

2. 用resample结合first()获取首个交易日开盘价

直接对open列使用first()聚合函数,就能拿到每周第一个交易日的真实开盘价。如果需要同时处理其他行情列(比如收盘价、高低价),可以用agg()指定每列的聚合规则:

# 按周重采样,默认每周日为周结束日;如果要周一作为周开始,用'W-MON'
weekly_data = df.resample('W').agg({
    'open': 'first',  # 每周首个交易日开盘价
    'close': 'last',  # 每周最后一个交易日收盘价
    'high': 'max',    # 全周最高价
    'low': 'min'      # 全周最低价
})

3. 调整周的起始/结束日(可选)

默认'W'是以周日作为一周的最后一天,如果你想让周一作为一周的开始,把规则改成'W-MON'即可,同理还有'W-TUE'等,对应不同的周起始日。

常见报错排查

  • 如果提示TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex:说明你的索引不是时间类型,回到步骤1先把日期列转成DatetimeIndex。
  • 如果得到的周数据有缺失:检查原始日数据是否有缺失的交易日,或者用df.dropna(subset=['open'])先清理缺失值,再重采样。

举个直观的例子:
原始日数据:

dateopenclose
2024-01-01100105
2024-01-02106108
2024-01-03107110
2024-01-08109112

转周频('W')后,第一周(到1月7日)的open是100,第二周(到1月14日)的open是109,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:05:29