Pandas实现按客户分组统计过往6个月及未来6个月销售额总和
按客户、月份统计过往/未来6个月销售额的实现方案
核心逻辑
对同一个客户的所有记录,按月份计数器的范围筛选求和:
- 过往6个月销售额:统计同客户下,月份计数器大于等于
当前月-6、且小于当前月的所有销售额之和 - 未来6个月销售额:统计同客户下,月份计数器大于当前月、且小于等于
当前月+6的所有销售额之和
Python Pandas 实现代码
不需要自定义for循环,直接用分组+滑动窗口即可高效计算:
import pandas as pd # 1. 先按客户、月份计数器升序排序,保证时间顺序正确 df = df.sort_values(by=['客户', '月份计数器'], ignore_index=True) # 2. 计算过往6个月销售额(不含当前月,不足6个月则统计所有存在的历史月份) df['过往6个月销售额'] = df.groupby('客户')['销售额'].transform( lambda x: x.shift(1).rolling(window=6, min_periods=0).sum() ) # 3. 计算未来6个月销售额(不含当前月,不足6个月则统计所有存在的后续月份) df['未来6个月销售额'] = df.groupby('客户')['销售额'].transform( lambda x: x.shift(-1).rolling(window=6, min_periods=0).sum() )
Excel 实现方案
如果使用Excel处理,直接用SUMIFS公式即可,假设数据结构如下:
| 列号 | 列名 |
|---|---|
| A | 客户 |
| B | 月份计数器 |
| C | 销售额 |
数据从第2行开始,表头在第1行:
- D2(过往6个月销售额)输入公式:
=SUMIFS(C:C,A:A,A2,B:B,">="&B2-6,B:B,"<"&B2) - E2(未来6个月销售额)输入公式:
=SUMIFS(C:C,A:A,A2,B:B,">"&B2,B:B,"<="&B2+6)
输入完成后选中D2、E2下拉填充所有行即可。
内容的提问来源于stack exchange,提问作者gnimpf
相关产品推荐
相关产品推荐

