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

如何将含重复Name_id的Pandas DataFrame转为多列唯一ID格式?

按Name_id分组生成多列分类数据的实现方法

解决思路

通过为每个Name_id的组内记录添加顺序编号,结合pivot方法将原长表转换为宽表,完美适配分类数据的展开需求。

具体步骤及代码

  1. 添加组内顺序编号
    为每个Name_id的出现记录生成递增序号,确保后续透视时每个(Name_id, 序号)组合唯一:

    import pandas as pd
    data = pd.DataFrame({"Name_id" : ["John","Deep","Julia","John","Sandy",'Deep'], 
                         "Month_id" : ["December","March","May","April","May","July"],
                        "Colour_id" : ["Red",'Purple','Green','Black','Yellow','Orange']})
    
    # 生成组内序号(从1开始,让列名更直观)
    data['seq'] = data.groupby('Name_id').cumcount() + 1
    
  2. 透视生成多列数据
    分别对Month_id和Colour_id进行透视,为列名添加前缀区分后合并结果:

    # 透视生成月份多列
    month_df = data.pivot(index='Name_id', columns='seq', values='Month_id').add_prefix('Month_')
    # 透视生成颜色多列
    colour_df = data.pivot(index='Name_id', columns='seq', values='Colour_id').add_prefix('Colour_')
    
    # 合并最终结果
    final_result = pd.concat([month_df, colour_df], axis=1)
    
  3. 最终输出效果
    执行后final_result的结构如下:

    Month_1 Month_2 Colour_1 Colour_2
    Name_id                                    
    Deep         March    July   Purple    Orange
    John      December   April      Red     Black
    Julia          May     NaN    Green      NaN
    Sandy          May     NaN   Yellow      NaN
    

关键说明

你之前认为pivot仅适用于数值型数据,其实只要保证**(索引,列)组合对应唯一值**,它同样可以处理分类数据。这里通过添加组内序号,避免了透视时的聚合冲突,完美解决分类数据的宽表转换需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:15:16