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

如何拆分销售交易表中的捆绑产品行至单个产品行

拆分捆绑SKU销售交易记录的解决方案

我来给你详细说说怎么处理这个需求,用Python的pandas库就能高效搞定,步骤清晰还不用写复杂循环:

先看原始数据

销售交易表

Date, Product, Qty
1 Jan 2017, A, 10
2 Jan 2017, Bundle X, 5
3 Jan 2017, B, 10
4 Jan 2017, Bundle Y, 5

捆绑产品组件关系表

ParentSKU, ComponentSKU, Quantity
Bundle X, A, 3
Bundle X, B, 5
Bundle X, C, 10
Bundle Y, P, 5
Bundle Y, Q, 7
Bundle Y, R, 12
Bundle Y, S, 3

具体实现步骤

1. 导入库并加载数据

先把两张表的数据转换成pandas的DataFrame,方便后续操作:

import pandas as pd

# 加载销售交易表数据
sales_data = [
    ["1 Jan 2017", "A", 10],
    ["2 Jan 2017", "Bundle X", 5],
    ["3 Jan 2017", "B", 10],
    ["4 Jan 2017", "Bundle Y", 5]
]
sales_df = pd.DataFrame(sales_data, columns=["Date", "Product", "Qty"])

# 加载捆绑组件关系表数据
bundle_data = [
    ["Bundle X", "A", 3],
    ["Bundle X", "B", 5],
    ["Bundle X", "C", 10],
    ["Bundle Y", "P", 5],
    ["Bundle Y", "Q", 7],
    ["Bundle Y", "R", 12],
    ["Bundle Y", "S", 3]
]
bundle_df = pd.DataFrame(bundle_data, columns=["ParentSKU", "ComponentSKU", "Quantity"])

2. 拆分单个SKU和捆绑SKU的记录

把销售表分成两部分:不需要处理的单个SKU记录,和需要拆分的捆绑SKU记录:

# 单个SKU的记录直接保留
single_sku_sales = sales_df[~sales_df["Product"].str.startswith("Bundle")].copy()

# 筛选出需要拆分的捆绑SKU记录
bundle_sales = sales_df[sales_df["Product"].str.startswith("Bundle")].copy()

3. 关联组件表并计算实际销量

把捆绑销售记录和组件表关联,然后计算每个组件的实际销量(捆绑销售数量 × 单份捆绑里的组件数量):

# 按捆绑SKU关联两张表
merged_bundle = pd.merge(
    bundle_sales,
    bundle_df,
    left_on="Product",
    right_on="ParentSKU",
    how="inner"
)

# 计算组件的实际销售数量
merged_bundle["Qty"] = merged_bundle["Qty"] * merged_bundle["Quantity"]

# 整理成目标格式的列名和结构
split_bundle_sales = merged_bundle[["Date", "ComponentSKU", "Qty"]].rename(columns={"ComponentSKU": "Product"})

4. 合并结果得到最终表

把单个SKU的记录和拆分后的捆绑组件记录合并,再按日期排序就得到目标结果:

# 合并两部分数据
final_sales = pd.concat([single_sku_sales, split_bundle_sales], ignore_index=True)

# 按日期排序,和示例结果顺序一致
final_sales = final_sales.sort_values("Date").reset_index(drop=True)

# 输出结果
print(final_sales.to_csv(index=False))

运行后输出的结果完全符合你的要求:

Date,Product,Qty
1 Jan 2017,A,10
2 Jan 2017,A,15
2 Jan 2017,B,25
2 Jan 2017,C,50
3 Jan 2017,B,10
4 Jan 2017,P,25
4 Jan 2017,Q,35
4 Jan 2017,R,60
4 Jan 2017,S,15

补充:如果一定要用循环?

虽然用pandas的向量运算效率更高,但如果硬要写循环实现,也可以遍历每条捆绑销售记录,再遍历对应的组件生成新行,但代码会繁琐很多,数据量大的时候性能也差,所以更推荐上面的方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:35:07