Python Pandas如何为相似分组数据添加组ID与全局唯一ID
Pandas 实现列表拆行+自定义ID生成方案
核心实现逻辑:
- 先把存储列表值的
variation_list列拆分为单行单值的长表格式 - 按原始产品条目顺序生成连续组ID,同个原始产品拆分出的所有行共享同一个
group_id - 按拆分后的全局行顺序生成连续唯一ID,每个拆分行对应独立的
unique_id
完整实现代码
import pandas as pd # 1. 构造/读取原始DataFrame # 注意:如果你的variation_list列是字符串格式(比如存储为"['Black', 'White']"文本),先执行下面两行转成真实列表 # import ast # df['variation_list'] = df['variation_list'].apply(ast.literal_eval) df = pd.DataFrame({ 'product_title': [ 'Chauvet DJ GigBar Move Effect Light System', 'Rane Twelve MKII DJ Controller' ], 'variation_list': [ ['Black', 'White'], ['New', 'Blemished'] ] }) # 2. 拆分variation列表为单独行 df = df.explode('variation_list', ignore_index=True) # 3. 生成group_id:同产品同组,从FAT-1301开始编号 group_serial = df['product_title'].factorize()[0] + 1301 df['group_id'] = [f'FAT-{serial:04d}' for serial in group_serial] # 4. 生成unique_id:全局唯一,从FAT-01开始编号 unique_serial = range(1, len(df)+1) df['unique_id'] = [f'FAT-{serial:02d}' for serial in unique_serial] # 5. 调整列顺序匹配目标结构 df = df[['group_id', 'product_title', 'variation_list', 'unique_id']]
运行结果
执行代码后输出的DataFrame和预期结构完全一致:
group_id product_title variation_list unique_id 0 FAT-1301 Chauvet DJ GigBar Move Effect Light System Black FAT-01 1 FAT-1301 Chauvet DJ GigBar Move Effect Light System White FAT-02 2 FAT-1302 Rane Twelve MKII DJ Controller New FAT-03 3 FAT-1302 Rane Twelve MKII DJ Controller Blemished FAT-04
适配说明
- 如果存在同名不同产品的场景,不要用
product_title做分组依据,可以在原始DataFrame先生成不重复的产品序号列,拆分后基于这个序号列生成group_id即可 - 如果需要调整ID起始值,直接修改代码里
1301和range()的起始数字即可 - 如果需要调整ID补零位数,修改格式化字符串里的位数参数即可,比如要3位补零就把
%02d改成%03d
内容的提问来源于stack exchange,提问作者hawaj
相关产品推荐
相关产品推荐

