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

按ID分组计算过去12个月数值总和的Pandas实现需求

解决方案:按ID计算过去12个月的Order_Count总和

方法1:分组后结合时间范围求和

这种方法直接针对每个ID的每条记录,筛选出该记录日期前365天内的所有数据并求和,逻辑清晰直观。

步骤:

  • 转换date列为datetime格式,保证时间运算有效
  • 按ID分组,对每组内的每条数据,计算其日期往前365天范围内的Order_Count总和
  • 整理结果为新的DataFrame

代码示例:

import pandas as pd

# 构造示例数据
data = {
    'ID': ['X8DE9C1382D02F287B6', 'X8DE9C1382D02F212N1', 'X8DE9C1382D02F222E1', 'X8DE9C1312D02F222W1'],
    'date': ['2021-04-23', '2021-04-24', '2021-04-24', '2021-05-24'],
    'Order_Count': [16, 11, 9, 8]
}
df = pd.DataFrame(data)

# 转换date列为datetime类型
df['date'] = pd.to_datetime(df['date'])

# 定义函数,计算每组内每条记录的过去365天总和
def calculate_rolling_sum(group):
    # 按日期排序,确保时间顺序正确
    group = group.sort_values('date')
    # 对每条记录,筛选日期在[当前date-365天, 当前date]的范围,求和
    group['Past_12Months_Order_Count'] = group.apply(
        lambda row: group[(group['date'] >= row['date'] - pd.Timedelta(days=365)) & (group['date'] <= row['date'])]['Order_Count'].sum(),
        axis=1
    )
    return group

# 按ID分组应用函数,得到结果
result_df = df.groupby('ID', group_keys=False).apply(calculate_rolling_sum)

# 若需每个ID的最新日期对应过去12个月总和,可执行以下代码
latest_result_df = result_df.sort_values('date').groupby('ID').last()[['date', 'Past_12Months_Order_Count']].reset_index()

方法2:正确使用时间滚动窗口(解决你之前的问题)

你之前用滚动窗口不符合需求,大概率是未设置正确的分组和时间窗口参数。以下是正确用法:

步骤:

  • 转换date列为datetime并按ID、日期排序
  • 按ID分组后,使用rolling('365D')时间窗口求和,设置closed='right'保证包含当前日期

代码示例:

# 转换日期并排序
df['date'] = pd.to_datetime(df['date'])
df_sorted = df.sort_values(['ID', 'date'])

# 按ID分组,使用时间滚动窗口计算总和
df_sorted['Past_12Months_Order_Count'] = df_sorted.groupby('ID').rolling('365D', on='date', closed='right')['Order_Count'].sum().reset_index(level=0, drop=True)

# 得到最终结果DataFrame
result_df = df_sorted[['ID', 'date', 'Past_12Months_Order_Count']]

结果说明

  • 示例数据中每个ID仅有一条记录,因此过去365天的总和等于自身Order_Count值;若某个ID存在多时间点记录,会自动累加符合时间范围的数值。
  • 若只需每个ID的最新时间点对应过去12个月总和,对结果按ID分组取最后一条记录即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 01:54:12