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

如何用for循环和函数提取全年数据中上月销售退货数据,groupby参数如何设置

实现方案

你不需要用for循环实现,直接用pandas内置的groupby+shift组合即可完成需求,具体步骤如下:

  1. 先完成数据预处理,确保日期列格式正确且按时间排序
import pandas as pd

# 替换为你实际的日期列名
df['date'] = pd.to_datetime(df['date'])
# 按日期升序排序,保证时间顺序正确
df = df.sort_values('date').reset_index(drop=True)
  1. 确定groupby的参数:
    groupby需要填写你统计维度的唯一标识字段,比如你需要按单个商品统计上月的销售/退货数据,就填商品唯一ID列(比如product_id);如果你需要按「门店+商品」的组合维度统计,就填['store_id', 'product_id'],根据你的实际业务场景调整字段即可。
  2. 生成上月数据列
    如果你的原表已经是按维度+月度聚合好的数据,直接用如下代码:
# 替换groupby的维度字段、替换为你实际的当月销量/退货列名
df['sales quantity'] = df.groupby('product_id')['当月销量列名'].shift(1)
df['return quantity'] = df.groupby('product_id')['当月退货列名'].shift(1)

如果你的原表是单条交易明细数据,需要先做月度聚合再关联回原表:

# 先按维度+月度聚合统计
monthly_stat = df.groupby(
    ['product_id', pd.Grouper(key='date', freq='M')]
).agg(
    月度总销量=('销量列名', 'sum'),
    月度总退货=('退货列名', 'sum')
).reset_index()
# 生成上月数据
monthly_stat['sales quantity'] = monthly_stat.groupby('product_id')['月度总销量'].shift(1)
monthly_stat['return quantity'] = monthly_stat.groupby('product_id')['月度总退货'].shift(1)
# 关联回原表保留所有原始列
df['month'] = df['date'].dt.to_period('M')
monthly_stat['month'] = monthly_stat['date'].dt.to_period('M')
df = df.merge(
    monthly_stat[['product_id', 'month', 'sales quantity', 'return quantity']],
    on=['product_id', 'month'],
    how='left'
).drop('month', axis=1)

注意事项

  • 每个月最早的一条数据因为没有上月数据,对应sales quantity和return quantity会返回空值,属于正常逻辑
  • 如果你的统计维度包含多个字段,直接把所有维度字段添加到groupby的参数列表中即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:36:03