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

Python Pandas求每周零售商-SKU销售额占当周总额比例问题

计算每周各零售商-SKU销售额的周占比

你好,针对你要计算每周各零售商-SKU销售额占当周总销售额比例的需求,我给你两种贴合现有数据的简洁实现方案:

方案1:用groupby.transform一步到位(推荐)

transform方法能在不改变原数据结构的前提下,把每周的总销售额直接映射到对应的每一行,非常适合你的场景:

# 保留你已经完成的分组求和
df_group = df_period.groupby(['Sku', 'Week','RetailerCode'], as_index=False)['Sales'].sum()

# 新增列:计算当前行所属周的总销售额,广播到每一行
df_group['Week_Total_Sales'] = df_group.groupby('Week')['Sales'].transform('sum')

# 计算占比,同时处理周总销售额为0的情况(避免除以0报错)
df_group['Sales_Ratio'] = df_group['Sales'] / df_group['Week_Total_Sales'].replace(0, float('nan'))

处理后,Sales_Ratio列就是你要的占比——比如你示例里第49周的总销售额是1336,RC1003的占比就是832/1336≈0.6228,完全符合预期。

方案2:分步计算周总销售额再合并

如果你更习惯分步操作,也可以先单独算出每周的总销售额,再和现有数据关联:

# 第一步:保留你已有的分组数据
df_group = df_period.groupby(['Sku', 'Week','RetailerCode'], as_index=False)['Sales'].sum()

# 第二步:单独计算每周的总销售额,并重命名列避免冲突
weekly_total = df_period.groupby('Week', as_index=False)['Sales'].sum().rename(columns={'Sales': 'Week_Total_Sales'})

# 第三步:按Week字段合并两个数据框
df_group = df_group.merge(weekly_total, on='Week', how='left')

# 第四步:计算占比,同样处理分母为0的情况
df_group['Sales_Ratio'] = df_group['Sales'] / df_group['Week_Total_Sales'].replace(0, float('nan'))

小提示

  • 两种方案的核心都是先拿到每周的总销售额,再和原数据关联计算比例——不需要同时按Week和Retailer分组,因为我们需要的是整周的总和,不是某零售商的周总和。
  • 替换0为nan是为了避免当某周总销售额为0时出现除以0的报错,这时候占比设为空值更合理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:49:54