计算日斜率或周销售环比差值的技术实现问询
周销售额差值计算实现方案
通用逻辑
- 第一步:按周维度分组,计算每周的销售总额
- 第二步:对周销售总额做差分计算,即当前周总额减去上一周总额,得到每周对应的change值
- 第三步:将每周change值关联映射到原数据表对应周的所有行,首周无前置数据的位置可以填充0、null等任意值,满足同周change值统一即可
实现代码
SQL实现(支持窗口函数的数据库,如MySQL8.0+、PostgreSQL、Hive等)
WITH week_total AS ( -- 计算每周总销售额 SELECT week, SUM(sale) AS total_sale FROM 你的表名 GROUP BY week ), week_change_calc AS ( -- 计算每周和上周的销售额差值 SELECT week, total_sale - LAG(total_sale, 1) OVER (ORDER BY week ASC) AS week_change FROM week_total ) -- 关联回原表得到最终结果 SELECT t.week, t.sale, COALESCE(wc.week_change, 0) AS `change` FROM 你的表名 t LEFT JOIN week_change_calc wc ON t.week = wc.week ORDER BY t.week;
执行后首周(周20)change值为0,周21为-50,周22为-10,符合要求。
Python Pandas实现
import pandas as pd # 假设你的原始数据存在DataFrame df中 # 1. 按周聚合销售额并计算周差值 week_agg = df.groupby('week', as_index=False)['sale'].sum() week_agg['change'] = week_agg['sale'].diff() # 2. 将周差值映射回原表 df = df.merge(week_agg[['week', 'change']], on='week', how='left') # 3. 首周空值填充为0,也可根据需要填充None df['change'] = df['change'].fillna(0).astype(int)
运行后输出结果和你给出的期望输出完全一致。
内容的提问来源于stack exchange,提问作者lil-wolf
相关产品推荐
相关产品推荐

