如何将DataFrame列值转为列标题并保留重复行?
解决方案
步骤说明
你的数据存在重复的Index+Column B组合,普通pivot无法处理重复索引,需要先添加辅助序号区分重复行,再完成数据重塑:
代码实现
import pandas as pd # 构造原始DataFrame df = pd.DataFrame({ 'Index': [1, 3, 3, 3, 3], 'Column B': ['type1', 'type1', 'type2', 'type2', 'type1'], 'Column C': ['name1', 'name2', 'name3', 'name3', 'name2'], 'Column D': ['true', 'false', 'false', 'false', 'false'] }) # 给每个(Index, Column B)分组添加序号,解决重复行冲突 df['seq'] = df.groupby(['Index', 'Column B']).cumcount() # 重塑数据:将Column B的类型转为列,值取Column C pivoted = df.pivot(index=['Index', 'seq'], columns='Column B', values='Column C').reset_index() # 合并Column D(同一组内Column D值一致,取第一个即可) col_d = df.groupby(['Index', 'seq'])['Column D'].first().reset_index() result = pivoted.merge(col_d, on=['Index', 'seq']) # 调整列顺序并移除辅助列seq result = result[['type1', 'type2', 'Column D', 'Index']] print(result)
输出结果
type1 type2 Column D Index 0 name1 NaN true 1 1 name2 name3 false 3 2 name2 name3 false 3
内容的提问来源于stack exchange,提问作者letícia
相关产品推荐
相关产品推荐

