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

Pandas如何按每日01:00起始的偏移24小时窗口对日内数据分组聚合

解决方案

最优方案1:时间索引偏移后分组(代码最简洁)

核心逻辑是把所有时间戳向前偏移1小时,让自定义窗口的起始点(每日01:00)对齐到自然日的00:00,直接按偏移后的日期分组即可,完全符合需求:

import pandas as pd

# 核心代码,一行实现
agg_result = df.groupby((df.index - pd.Timedelta(hours=1)).date)['var'].sum()

逻辑验证

  • 原时间戳2021-01-01 01:00:00 减1小时后为2021-01-01 00:00:00,对应分组日期2021-01-01
  • 原时间戳2021-01-02 00:59:59 减1小时后为2021-01-01 23:59:59,同样对应分组日期2021-01-01
  • 所有时间点刚好被划分到要求的24小时窗口中,不需要额外创建标记列,性能远高于自定义标记分组。

最优方案2:resample自定义窗口(时序操作更灵活)

如果你的pandas版本≥1.3.0,用resample的origin参数可以直接定义窗口起始点,适合后续需要继续做时序处理的场景:

# 按每日01:00为起点的24小时窗口聚合,标签取窗口起始时间
agg_result = df.resample(
    rule='24h',
    origin='1h',  # 窗口起始偏移1小时
    closed='left', # 窗口左闭右开,包含起始01:00,不包含次日01:00
    label='left' # 聚合结果的索引用窗口起始时间标记
).sum()

# 如果需要把索引转为日期格式,可以再加一步
agg_result.index = agg_result.index.date

两种方案性能差异不大,根据后续的使用场景选择即可,都比通过标记列自定义分组的方式效率高3~10倍(数据量越大优势越明显)。


内容的提问来源于stack exchange,提问作者ℕʘʘḆḽḘ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:54:04