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

如何使用Python pandas DataFrame获取52周高低价对应日期

解决方案

你要拿到滚动252交易日(对应52周的交易日总数)窗口内最高价、最低价对应的日期,核心是定位窗口内极值对应的行索引(即日期),具体实现如下:

前置预处理

首先确保你的数据按交易日升序排列,且日期列转为datetime格式、设为索引(如果已经做过这步可以跳过):

import pandas as pd

df = pd.read_csv(csv_file_name, engine='python')
# 替换成你CSV文件中实际的日期列名,比如trade_date、Date等
df['date'] = pd.to_datetime(df['date'])
df = df.set_index('date').sort_index()

原有高低价计算(和你现有逻辑一致)

df['52W H'] = df['HIGH'].rolling(window=252, center=False).max()
df['52W L'] = df['LOW'].rolling(window=252, center=False).min()

计算极值对应日期

方法1:兼容所有pandas版本(通用写法)

用rolling.apply结合np.argmax/np.argmin拿到极值在窗口内的位置,匹配对应日期即可:

import numpy as np

df['52W H date'] = df['HIGH'].rolling(252, center=False).apply(
    lambda x: x.index[np.argmax(x)]
)
df['52W L date'] = df['LOW'].rolling(252, center=False).apply(
    lambda x: x.index[np.argmin(x)]
)

方法2:pandas 1.1.0+版本推荐(性能更高)

新版本pandas的Rolling对象原生支持idxmax/idxmin方法,不需要自定义apply函数,数据量大的时候运行速度比方法1快数倍:

df['52W H date'] = df['HIGH'].rolling(window=252, center=False).idxmax()
df['52W L date'] = df['LOW'].rolling(window=252, center=False).idxmin()

注意事项

  • 上述逻辑默认返回窗口内第一次出现极值的日期,如果需要取最后一次出现极值的日期,可以在apply方法中反转窗口序列后计算位置,再做日期匹配。
  • 前251行因为窗口长度不足252个交易日,返回值为空,和你现有52周高低价的空值逻辑完全对齐,不需要额外处理。
  • 计算前必须确认数据按日期升序排列,否则滚动窗口范围、日期匹配结果都会出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 19:09:22