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

如何在Pandas DataFrame中按行上下文引用其他行计算用户过往3天数据和

Pandas 按用户计算前3天Total总和实现方案

首先做数据预处理,确保日期格式正确且数据按时间排序:

import pandas as pd

# 转换Date列为datetime格式
df['Date'] = pd.to_datetime(df['Date'])
# 按用户ID、日期升序排序,保证时间顺序正确
df = df.sort_values(['UserID', 'Date']).reset_index(drop=True)

方法1:适用于日期连续的场景(匹配你给出的示例数据)

通过分组滚动窗口+偏移的方式排除当前行,计算前3行(对应前3天)的Total之和:

df['TotalPast3Days'] = df.groupby('UserID')['Total']\
                         .rolling(window=3, min_periods=1)\
                         .sum()\
                         .shift(1)\
                         .reset_index(drop=True)

参数说明:

  • window=3:设置滚动窗口大小为3
  • min_periods=1:前3行数据不足3条时,按实际存在的天数计算总和,如果你需要不足3天就返回空值,删除该参数即可
  • shift(1):将计算结果向下偏移1行,排除当前行的数值,只统计当前行之前的记录

方法2:适用于存在日期断档的场景

如果你的数据可能有缺失的日期,需要按真实的3天时间范围计算而非固定行数,可以使用时间窗口实现:

# 将Date设为索引以使用时间窗口
df = df.set_index('Date')
df['TotalPast3Days'] = df.groupby('UserID')['Total']\
                         .rolling(window='3D', closed='left')\
                         .sum()\
                         .reset_index(drop=True)
# 恢复普通索引
df = df.reset_index()

参数说明:

  • window='3D':设置滚动窗口为3天时间范围,而非固定3行
  • closed='left':窗口范围排除当前日期,只统计当前日期往前3天内的所有数据

内容的提问来源于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 06:54:04