如何用Pandas通过Parent列填充变体产品的Category字段?
非循环填充变体产品的分类信息
问题场景
- 处理包含三类产品的DataFrame:常规产品(Simple)、可变产品(Variable)、变体产品(Variation)
- 变体产品的
Category字段为空,Parent字段关联父产品的SKU - 需要用非循环方式将父产品的
Category值批量填充到对应变体中
解决方案
核心思路是先构建父产品SKU到分类的映射关系,再通过矢量化操作批量填充,完全避免循环:
修改后的完整代码
import pandas as pd def get_data(): fields = ['ID', 'SKU', 'Name', 'Category', 'Type', 'Parent'] data = pd.read_csv('input/products.csv', skipinitialspace=True, usecols=fields) # 构建父产品SKU -> Category的映射(仅包含有分类的父产品) parent_category_map = data[data['Type'].isin(['Simple', 'Variable'])].set_index('SKU')['Category'] # 填充变体产品的空Category:优先保留原有值,空值用Parent匹配映射填充 data['Category'] = data['Category'].combine_first(data['Parent'].map(parent_category_map)) return data
代码说明
- 构建映射字典:筛选出所有具备分类信息的父产品(
Simple和Variable类型),以SKU为索引创建分类映射,确保后续可以通过父SKU快速查找分类。 - 批量填充:使用
combine_first方法,对Category字段的空值进行填充——通过Parent列匹配映射字典中的分类值,非空值保持不变。 - 效率优势:所有操作均为Pandas矢量化运算,比循环遍历快几个数量级,适合处理大规模数据集。
验证效果
针对示例CSV数据,运行后:
GFP002A和GFP002B的Category会被填充为Cleaning supplies(对应父产品GFP002的分类)AV002A因Parent指向的GFP001A不存在于父产品列表中,Category仍为NaN(符合逻辑)
内容的提问来源于stack exchange,提问作者RaulZ
相关产品推荐
相关产品推荐

