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

基于Model和Class拆分Lot_1生成Lot_2的Pandas数据处理需求

Pandas按分组拆分生成新编号列问题

原始数据

给定包含model、lot_1、class三列的DataFrame:

import pandas as pd

df = pd.DataFrame({'model':['A','A','A','A', 'A','A','A','A','B','B','B','B','B','B'],
                  'lot_1':[0,0,0,0,0,1,2,2,0,0,1,1,2,2],
                  'class':['0','3','3','2','2','1','5','5','0','0','0','1','1','1']})

需求

  • 按model分组,基于class拆分lot_1生成Lot_2列
  • 保留lot_1的原有顺序,class仅作区分,无大小/顺序意义
  • 同一lot_1下不同class需按顺序分配新编号
  • 切换model时,Lot_2从0重新开始编号

期望输出

最终DataFrame如下:

modellot_1classLot_2
A000
A031
A031
A022
A022
A113
A254
A254
B000
B000
B101
B112
B213
B213

解决方案

直接通过分组+因子化实现,代码简洁高效:

# 按model分组,对每组内的(lot_1, class)组合按出现顺序编号
df['Lot_2'] = df.groupby('model').apply(
    lambda g: pd.factorize(zip(g['lot_1'], g['class']))[0]
).explode().astype(int)

# 验证结果
print(df)

逻辑说明

  1. 分组隔离:groupby('model')确保不同model的编号完全独立,切换时自动重置
  2. 组合标识:把lot_1和class绑成元组,作为判断是否需要新编号的唯一依据
  3. 顺序编号:pd.factorize()会按元组首次出现的顺序分配从0开始的连续整数,重复的组合复用同一个编号
  4. 还原结构:explode()把分组处理的结果拆回原DataFrame的行结构,astype(int)保证编号为整数类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 23:04:52