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

如何按每N天分组选取对应周期内的最高Price值

按N天周期分组取最高Price实现方法

前置处理

首先需要将Date列转换为pandas标准datetime格式,这是所有时间分组操作的前提:

import pandas as pd

# 加载你的数据表,以下用你给出的样例数据做演示
df = pd.DataFrame(
    [
        ["2022-05-11 04:00:00.0000000 +00:00", 1],
        ["2022-05-12 04:00:00.0000000 +00:00", 2],
        ["2022-05-13 04:00:00.0000000 +00:00", 3]
    ],
    columns=["Date", "Price"]
)

# 解析带时区的时间戳,将Date列设为索引(resample接口要求时间列为索引)
df["Date"] = pd.to_datetime(df["Date"])
df = df.set_index("Date")

两种核心分组场景实现

1. 互不重叠的固定N天周期分组

如果你的需求是把全量时间序列切成连续、互不重叠的N天块,取每个块内的最高Price,直接用pandas内置的resample方法即可,这也是最稳妥的实现,已经内置处理了时区、闰年、夏令时等时间边界问题:

# 替换为你需要的周期天数
n = 2
# 按n天周期分组,取每组Price最大值
period_max = df.resample(f"{n}D")["Price"].max().reset_index()

说明:resample默认以数据集内最早的时间戳作为第一个周期的起点,D频率默认对齐自然日零点,不需要额外做偏移调整。如果分组后出现无数据的空周期返回NaN,追加.dropna()即可过滤空组。

2. 滑动N天窗口分组

如果你的需求是每个时间点对应最近N天的滚动窗口内最高值(分组之间有重叠),使用rolling时间窗口实现:

n = 2
rolling_max = df.rolling(f"{n}D")["Price"].max().reset_index()

避坑提示

  • 不要手动计算「日期差//N天」生成分组键,这种硬编码方式遇到时区偏移、夏令时切换、闰年闰秒时会出现分组错误,pandas内置的时间分组接口已经处理了所有这些边界情况。
  • 如果时间列带时区信息,确保整列时区统一,否则时间类接口会抛出类型错误。
  • 如果需要指定分组的锚点时间(比如固定以每月1号为起点切分N天周期),可以给resample加origin参数调整起点,不需要手动计算偏移。

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

相关产品推荐
方舟 Agent Plan

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

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