Pandas使用unstack报错索引含重复项无法变形,如何转换得到目标宽表?
解决方法
方法1:直接使用pivot长表转宽表(最简洁)
pivot是Pandas专门用于长格式表格转宽格式的接口,直接指定索引、要展开的列、填充值即可:
res = df.pivot(index=['Site', 'Month'], columns='Class', values='Data').reset_index()
运行后即可得到你需要的目标格式。
方法2:修正set_index+unstack的写法
你之前的写法报错是因为没有把Class列加入索引,导致同组Site+Month存在多行重复索引。调整写法如下:
res = df.set_index(['Site', 'Month', 'Class'])['Data'].unstack('Class').reset_index()
把Class加入索引后取Data列再执行unstack,就不会出现重复索引报错。
方法3:用pivot_table兼容聚合场景
如果你的实际数据中存在同一个Site+Month+Class组合对应多条数据的情况,用pivot_table可以同时完成聚合和转宽操作:
# 这里aggfunc可以根据需求替换为mean、max等聚合函数 res = df.pivot_table(index=['Site', 'Month'], columns='Class', values='Data', aggfunc='sum').reset_index()
内容的提问来源于stack exchange,提问作者Elaine Yang
相关产品推荐
相关产品推荐

