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

Pandas日度OHLC股票数据重采样为月度时使用原始索引实际日期替代BM规则

实现方法

首先确保你的日度数据索引为datetime类型,若未转换先执行:

df_daily.index = pd.to_datetime(df_daily.index)

方法1:一步到位写法

import pandas as pd

output = df_daily.groupby(pd.Grouper(freq='M')).apply(
    lambda x: pd.Series(
        {
            'open': x['open'].iloc[0],
            'high': x['high'].max(),
            'low': x['low'].min(),
            'close': x['close'].iloc[-1]
        },
        name=x.index[-1]
    )
)

方法2:索引替换写法(适合不想使用自定义apply的场景)

# 第一步:先按正常逻辑计算月度OHLC数值
ohlc = df_daily.resample('M').agg({'open': 'first', 'high': 'max', 'low': 'min', 'close': 'last'})
# 第二步:提取原始数据中每个月实际存在的最后一个交易日日期
month_last_dates = df_daily.groupby(pd.Grouper(freq='M')).apply(lambda x: x.index[-1])
# 第三步:替换索引为实际交易日日期
ohlc.index = month_last_dates
output = ohlc

逻辑说明

两种写法的分组逻辑都和你之前使用resample('BM')的分组范围一致,区别仅在于最终索引直接取自原始数据当月最后一条记录的日期,不会生成原始数据中不存在的月末日期,OHLC的统计规则完全符合你的要求:

  • open取当月第一个交易日的开盘价
  • high取当月所有交易日的最高价
  • low取当月所有交易日的最低价
  • close取当月最后一个交易日的收盘价

两种写法运行后得到的结果都和你给出的预期输出完全匹配。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:48:04