如何针对不同型号按指定零件分组生成批次
按型号指定列分组处理DataFrame
原始数据定义
import pandas as pd df1 = pd.DataFrame({'model':['A','A','A','A','A','B','B','B','B','B'], 'p1':['p1_1','p1_1','p1_2','p1_2','p1_3','p1_4', 'p1_4','p1_5','p1_6','p1_7'], 'p2':['p2_1','p2_1','p2_1','p2_2','p2_3', 'p2_4', 'p2_5', 'p2_6', 'p2_7','p2_7']}) df2 = pd.DataFrame({'model':['A','B'], 'part':['p1','p2']})
解决方案
核心思路是通过型号与分组列的映射,拆分数据后按规则分组处理,最后合并结果。
步骤1:创建分组列映射字典
先把df2的型号与对应分组列转成字典,方便后续调用:
part_map = df2.set_index('model')['part'].to_dict() # 输出: {'A': 'p1', 'B': 'p2'}
步骤2:按型号拆分处理
遍历每个型号的子数据集,使用指定列分组,这里以保留每个分组的首条记录为例(可根据需求调整聚合逻辑):
result_dfs = [] for model, group in df1.groupby('model'): # 获取当前型号对应的分组列 group_col = part_map[model] # 按指定列分组,保留每组第一条记录 processed_group = group.groupby(group_col, as_index=False).first() result_dfs.append(processed_group) # 合并所有处理后的结果 target_df = pd.concat(result_dfs, ignore_index=True)
步骤3:查看目标结果
执行后输出的target_df如下:
model p1 p2 0 A p1_1 p2_1 1 A p1_2 p2_1 2 A p1_3 p2_3 3 B p1_4 p2_4 4 B p1_4 p2_5 5 B p1_5 p2_6 6 B p1_6 p2_7
扩展:添加分组标识
如果需要给每行标记所属的分组序号,可修改处理逻辑:
result_dfs = [] for model, group in df1.groupby('model'): group_col = part_map[model] # 给每个分组分配唯一序号(从1开始) group['group_id'] = group.groupby(group_col).ngroup() + 1 result_dfs.append(group) target_df = pd.concat(result_dfs, ignore_index=True)
处理后每行都会带上group_id,标识其在对应型号下的分组归属。
内容的提问来源于stack exchange,提问作者ghost_like
相关产品推荐
相关产品推荐

