Roll Up Product SKUs:如何保留唯一基础SKU并合并全部变体SKU
SKU重复合并落地方案
核心逻辑
利用基础SKU的命名规则完成自动分组,将同组重复基础SKU下的变体统一迁移到留存主SKU后,删除冗余基础SKU即可。
执行步骤
- 分组规则匹配:用正则提取所有基础SKU中
id.后固定的5位数字作为唯一分组标识,所有带有相同5位数字的基础SKU归为同一待合并组。 - 留存主SKU定位:每组内默认选取
id.后5位数字无额外字母后缀的原始SKU作为留存主SKU;若不存在则取组内创建时间最早的SKU作为主SKU。 - 变体批量迁移:将组内其他所有重复基础SKU挂载的全部变体SKU,父关联字段统一修改为留存主SKU的ID。
- 冗余数据删除:全量校验变体关联关系无遗漏、无错误后,批量删除同组内除主SKU外的所有重复基础SKU。
注意事项
- 操作前必须完成全量SKU数据备份,避免误操作导致数据丢失。
- 可先抽取10~20组不同规模的SKU组做小范围测试,验证逻辑正确后再执行全量操作。
参考代码(Python处理CSV场景)
import re from collections import defaultdict import pandas as pd # 读取SKU数据 sku_df = pd.read_csv("your_sku_list.csv") # 分组正则:匹配id.后5位数字 group_reg = re.compile(r"id\.(\d{5})") # 筛选基础SKU和变体SKU base_sku = sku_df[sku_df["sku_type"] == "base"].copy() variant_sku = sku_df[sku_df["sku_type"] == "variant"].copy() # 为基础SKU打分组标签 base_sku["group_key"] = base_sku["sku_id"].apply(lambda x: group_reg.search(x).group(1) if group_reg.search(x) else None) # 按分组聚合 sku_groups = base_sku.groupby("group_key") for group_key, group_data in sku_groups: # 定位主SKU:无后缀的原始SKU main_sku_row = group_data[group_data["sku_id"].str.contains(r"id\.\d{5}$")] if not main_sku_row.empty: main_sku_id = main_sku_row.iloc[0]["sku_id"] else: # 兜底取最早创建的 main_sku_id = group_data.sort_values("create_time").iloc[0]["sku_id"] # 待删除的冗余基础SKU ID del_base_ids = group_data[group_data["sku_id"] != main_sku_id]["sku_id"].tolist() # 迁移变体 variant_sku.loc[variant_sku["parent_sku"].isin(del_base_ids), "parent_sku"] = main_sku_id # 删除冗余基础SKU sku_df = sku_df[~sku_df["sku_id"].isin(del_base_ids)] # 合并结果导出 sku_df = pd.concat([sku_df[sku_df["sku_type"] == "base"], variant_sku], ignore_index=True) sku_df.to_csv("merged_sku_list.csv", index=False)
内容的提问来源于stack exchange,提问作者NA Peters
相关产品推荐
相关产品推荐

