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

Pandas时间序列:获取滚动窗口最大值对应的最晚出现日期

实现滚动窗口内最高价最晚出现日期的计算方法

首先保证数据预处理正确:

  • 数据集必须按Date字段升序排列,否则滚动窗口的时间顺序会出错
  • 把Date字段转为pandas datetime类型,方便后续日期操作
import pandas as pd

# 预处理
df = df.sort_values('Date').reset_index(drop=True)
df['Date'] = pd.to_datetime(df['Date'])

# 对齐你原有逻辑,排除当前行的影响,先做shift操作
shifted_high = df['High'].shift(1)
shifted_date = df['Date'].shift(1)

接下来定义滚动窗口自定义计算函数,实现找最晚出现的最高价对应日期的逻辑:

def get_last_high_date(window):
    # 窗口数据全为空的场景(前N行窗口长度不足)直接返回空时间
    if window.isna().all():
        return pd.NaT
    # 获取当前窗口内的最高价
    window_max = window.max()
    # 找到窗口内最后一个等于最高价的索引位置
    last_max_index = window[window == window_max].last_valid_index()
    # 返回对应位置的日期
    return shifted_date.loc[last_max_index]

最后应用到滚动窗口得到结果:

# 过去60天(不含当日)最高价的最晚出现日期
df['last_max_high_date_60'] = shifted_high.rolling(60).apply(get_last_high_date).map(pd.to_datetime)

# 可以同步保留你原有逻辑的最高价计算结果
df['max_high_60'] = shifted_high.rolling(60).max()

补充说明:

  • 前59行因为窗口长度不足60天,会返回空时间值NaT,符合时间序列滚动计算的常规逻辑
  • 如需调整窗口天数,直接修改rolling()内的参数即可,比如计算30天窗口就改为rolling(30)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:18:04