pivot/unstack操作因重复值报错但需保留原值的问题如何解决
解决方案
pivot()报错的核心原因是默认要求index和columns的组合值唯一,你的场景中同一A、B分类下存在多条C值记录,且不允许去重聚合,可通过以下两种方案实现需求:
方案1:添加辅助索引后pivot(逻辑直观,无数据类型兼容性问题)
import pandas as pd # 构造示例数据 df = pd.DataFrame({ 'A': ['dj', 'dj', 'cd', 'cd', 'cd', 'dj'], 'B': ['rock', 'rock', 'rock', 'opera', 'opera', 'opera'], 'C': [4.5, 6, 3.2, 4.8, 7, 9] }) # 为相同(A,B)分组的行添加组内序号作为辅助索引 df['aux'] = df.groupby(['A', 'B']).cumcount() # 基于辅助索引+A列执行pivot操作 res = df.pivot(index=['aux', 'A'], columns='B', values='C').reset_index() # 清理辅助列与索引名得到最终结果 res = res.drop(columns='aux').rename_axis(columns=None)
方案2:哑变量转换(代码更简洁)
# 生成B列的独热编码,与C值相乘后将0替换为NaN dummies = pd.get_dummies(df['B']).mul(df['C'], axis=0).replace(0, float('nan')) # 拼接A列得到最终结果 res = pd.concat([df['A'], dummies], axis=1)
两种方案输出的结果均和你期望的格式完全一致。
内容的提问来源于stack exchange,提问作者Newbielp
相关产品推荐
相关产品推荐

