如何将含重复Name_id的Pandas DataFrame转为多列唯一ID格式?
按Name_id分组生成多列分类数据的实现方法
解决思路
通过为每个Name_id的组内记录添加顺序编号,结合pivot方法将原长表转换为宽表,完美适配分类数据的展开需求。
具体步骤及代码
添加组内顺序编号
为每个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透视生成多列数据
分别对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)最终输出效果
执行后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
相关产品推荐
相关产品推荐

