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

如何基于现有DataFrame为SKU新增各门店销售额列?

解决方法:将门店销售额转换为宽表列

核心思路

无需循环遍历SKU,直接利用pandas的透视表或分组转置功能,就能快速实现门店销售额的列转换,同时保留SKU的总销售额。

步骤1:原始数据示例

假设你的原始数据集DataFrame名为df,数据结构如下:

SKUStore codesales
1A432123
2B123456
1C23498

步骤2:实现宽表转换

方法1:使用pivot_table

先按SKU和门店代码聚合销售额,再转成宽表,最后合并总销售额:

import pandas as pd

# 按SKU和门店代码做透视,聚合销售额并填充空值为0
pivot_df = df.pivot_table(index='SKU', columns='Store code', values='sales', aggfunc='sum', fill_value=0)
# 提取门店代码的前缀(A/B/C)作为新列名
pivot_df.columns = [col[0] for col in pivot_df.columns]
# 计算每个SKU的总销售额
total_sales = df.groupby('SKU')['sales'].sum().rename('sales')
# 合并总销售额和门店销售额列
result_df = pd.concat([total_sales, pivot_df], axis=1)
# 补充缺失的A/B/C列(确保所有目标列都存在)
for col in ['A', 'B', 'C']:
    if col not in result_df.columns:
        result_df[col] = 0
# 调整列顺序并重置索引
result_df = result_df[['sales', 'A', 'B', 'C']].reset_index()

方法2:使用groupby + unstack

更简洁的链式写法:

import pandas as pd

result_df = (
    df.assign(Store_prefix=df['Store code'].str[0])
    .groupby(['SKU', 'Store_prefix'])['sales'].sum()
    .unstack(fill_value=0)
    .join(df.groupby('SKU')['sales'].sum().rename('sales'))
    .reindex(columns=['sales', 'A', 'B', 'C'])
    .reset_index()
)

最终输出结构

基于原始数据,执行后得到的DataFrame如下:

SKUsalesABC
1221123098
245604560

注:你期望输出中的数值为示例,实际结果会根据原始数据自动计算,核心逻辑是完成门店销售额的宽表转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 21:32:47