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

Pandas同比季度销售额差值计算的优化方案问询

优化同比季度销售额差值计算的简洁方案

你的现有方案可行,但可以利用Pandas内置的日期处理和分组函数大幅简化步骤,以下是两种高效实现方式:

方法一:针对已聚合的季度数据(如你提供的样本)

直接利用dt.quarter提取季度标识,结合groupby和diff/unstack完成计算,无需手动条件判断:

import pandas as pd

# 加载样本数据
sample_data = [{'date': pd.Timestamp('2019-03-31 00:00:00'), '#_widgets': 4502},
 {'date': pd.Timestamp('2019-06-30 00:00:00'), '#_widgets': 4388},
 {'date': pd.Timestamp('2019-09-30 00:00:00'), '#_widgets': 4703},
 {'date': pd.Timestamp('2019-12-31 00:00:00'), '#_widgets': 4344},
 {'date': pd.Timestamp('2020-03-31 00:00:00'), '#_widgets': 4206},
 {'date': pd.Timestamp('2020-06-30 00:00:00'), '#_widgets': 4281},
 {'date': pd.Timestamp('2020-09-30 00:00:00'), '#_widgets': 4879},
 {'date': pd.Timestamp('2020-12-31 00:00:00'), '#_widgets': 4115},
 {'date': pd.Timestamp('2021-03-31 00:00:00'), '#_widgets': 4313},
 {'date': pd.Timestamp('2021-06-30 00:00:00'), '#_widgets': 4578},
 {'date': pd.Timestamp('2021-09-30 00:00:00'), '#_widgets': 4467},
 {'date': pd.Timestamp('2021-12-31 00:00:00'), '#_widgets': 4871}]

df = pd.DataFrame(sample_data)

# 1. 一键提取季度(Q1-Q4格式)和年份,替代手动条件判断
df['quarter'] = 'Q' + df['date'].dt.quarter.astype(str)
df['year'] = df['date'].dt.year

# 2. 分组聚合+计算同比差值
# 方式A:展开年份为列,直观对比
result = df.groupby(['quarter', 'year'])['#_widgets'].sum().unstack()
result['diff_2020-2019'] = result[2020] - result[2019]
result['diff_2021-2020'] = result[2021] - result[2020]

# 方式B:保持原始层级结构,自动计算差值
result_stack = df.groupby(['quarter', 'year'])['#_widgets'].sum().to_frame()
result_stack['yoy_diff'] = result_stack.groupby(level=0)['#_widgets'].diff()

方法二:针对原始每日数据(一步到位)

如果是未聚合的每日销售额数据,直接用resample完成季度求和,结合shift计算同比:

# 假设df是包含每日销售额的原始数据
# 1. 重采样为季度总额+提取季度标识
quarterly_df = df.resample('Q', on='date')['#_widgets'].sum().reset_index()
quarterly_df['quarter'] = 'Q' + quarterly_df['date'].dt.quarter.astype(str)

# 2. 按季度分组,获取上一年同期数据并计算差值
quarterly_df['prev_year_sales'] = quarterly_df.groupby('quarter')['#_widgets'].shift(1)
quarterly_df['yoy_diff'] = quarterly_df['#_widgets'] - quarterly_df['prev_year_sales']

核心优化点

  • 用dt.quarter替代手动月份判断,代码更简洁且避免逻辑错误
  • 利用unstack将年份转为列,更直观地对比同季度跨年度数据
  • 针对每日数据,resample('Q')一步完成季度聚合,无需额外分组操作
  • shift函数可以明确展示上一年同期销售额,差值计算逻辑更清晰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 14:10:29