基于Python Pandas简化多SKU组异常值处理流程
批量处理SKU组异常值的方案可行性与实现
问题描述
我有12个对应不同SKU组的DataFrame,需要为每个组识别异常值并生成仅包含原数据中异常值的新DataFrame。目前已经完成了单个SKU组的处理流程(代码如下),现在想把剩余11个DataFrame放进列表里批量执行处理,这样后续新增SKU组时不用重复创建DataFrame,想问这个方案是否可行?
原单组处理代码:
#Data frames created from masterData SHAPEWEAR_df = grouped_skus.get_group('SHAPEWEAR') LEGGINGS_df = grouped_skus.get_group('LEGGINGS') ACTIVEWEAR_df = grouped_skus.get_group('ACTIVEWEAR') #etc... #LEGGINGS_df LEGGINGS_outliers = find_outliers_IQR(LEGGINGS_df['VOLUME']) index_hos = LEGGINGS_outliers.index.tolist() index_hos = LEGGINGS_outliers.index.tolist() ints = [] for element in index_hos: ints.append(int(element)) #print(ints) outliers_LEGGINGS_df = LEGGINGS_df.loc[ints] LEGGINGS_outliers.count()
方案可行性与实现
这个方案完全可行,而且是非常高效的优化方向,能彻底避免重复代码,后续新增SKU组时只需在分组列表里添加对应名称,无需额外编写处理逻辑。
批量处理实现步骤
- 定义所有需要处理的SKU组名称列表
- 遍历列表,逐个取出对应分组的DataFrame并执行异常值识别
- 用字典存储每个组的异常值DataFrame,方便后续按SKU组名称调用
优化后的批量处理代码
# 定义需要处理的SKU组名称列表(可继续添加其他SKU组) sku_groups = ['SHAPEWEAR', 'LEGGINGS', 'ACTIVEWEAR'] # 用字典存储每个SKU组的异常值DataFrame,比单独创建变量更整洁 outliers_dict = {} for sku_name in sku_groups: # 获取当前SKU组的原始DataFrame current_df = grouped_skus.get_group(sku_name) # 调用异常值识别函数 sku_outliers = find_outliers_IQR(current_df['VOLUME']) # 将异常值索引转为整数(如果原索引不是整数类型) outlier_indices = [int(idx) for idx in sku_outliers.index.tolist()] # 生成当前组的异常值DataFrame并存入字典 outliers_dict[f"{sku_name}_outliers_df"] = current_df.loc[outlier_indices] # 打印当前组的异常值数量(可选) print(f"{sku_name} 组异常值数量:{sku_outliers.count()}")
补充说明
- 原代码中重复执行了
index_hos = LEGGINGS_outliers.index.tolist(),批量代码里已去掉冗余操作 - 索引转整数的步骤用列表推导式简化,替代了原有的for循环,代码更简洁
- 后续调用某组异常值数据时,直接使用
outliers_dict['SHAPEWEAR_outliers_df']即可
内容的提问来源于stack exchange,提问作者Cyprus_Knolls
相关产品推荐
相关产品推荐

