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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:15:02