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

如何用Pandas原生方法实现按用户分组的前10天Total值条件聚合

Pandas 分组滚动近10天求和优化方案

核心思路

直接使用Pandas原生支持的时间滚动窗口实现,完全替代嵌套循环,底层为C实现的向量化运算,性能比嵌套循环提升几十到上百倍,完全符合Pandas开发规范。

前置处理

首先需要保证日期列是datetime类型,且每个用户的数据按日期排序:

import pandas as pd

# 转换Date列为datetime格式,是时间窗口计算的必要前提
df['Date'] = pd.to_datetime(df['Date'])
# 按用户ID+日期排序,保证时间序列顺序正确
df = df.sort_values(by=['UserID', 'Date']).reset_index(drop=True)

核心实现代码

# 按UserID分组,使用10天滚动窗口求和,和原有循环逻辑完全匹配
df['TotalPrev10Days'] = df.groupby('UserID', group_keys=False).apply(
    lambda group: group.set_index('Date')['Total']
                       .rolling(window='10D', closed='left')
                       .sum()
                       .reset_index(drop=True)
)

参数说明

  • window='10D':指定滚动窗口长度为10天,而非固定行数,完美适配日期不连续的业务场景
  • closed='left':窗口采用左闭右开规则,即包含当前日期-10天的记录,不包含当前行日期的记录,和你原有循环的筛选逻辑完全一致
  • 最终输出结果和你原有循环输出的结果完全匹配,无需额外调整业务逻辑

性能对比

原有嵌套循环的时间复杂度为O(n²),万行以上数据就会出现明显卡顿;而原生滚动窗口的时间复杂度接近线性,百万行级数据也可以在秒级完成计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:06:05