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

Pandas执行pivot时报错Index contains duplicate entries无法重塑如何解决

报错根因

调用pivot()方法抛出该错误的核心原因是*protocol_no与activity的组合存在重复条目*:

  • 协议号1586212下存在2条activity=drive的记录
  • 协议号2547852下存在2条activity=eat的记录
    pivot()要求每一组「行索引+列索引」的组合唯一,否则无法确定单元格对应的取值,因此触发报错,该报错与字段是字符串或数值类型无关。
解决方案

你给出的预期输出是保留重复组合的第一条description,可以用以下两种方式实现:

方案1:使用pivot_table()(推荐,适配重复值场景)

pivot_table()支持自定义聚合规则处理重复值,指定aggfunc='first'即可保留每个组合的第一条记录:

# 生成宽表
result = df.pivot_table(
    index="protocol_no",
    columns="activity",
    values="description",
    aggfunc="first"
).reset_index()

如果需要将同一个组合的多个描述拼接起来,可以修改聚合规则:

# 多个描述用顿号拼接
result = df.pivot_table(
    index="protocol_no",
    columns="activity",
    values="description",
    aggfunc=lambda x: "、".join(x.dropna())
).reset_index()

方案2:先去重再调用pivot()

先对重复的protocol_no+activity组合去重,再执行原有pivot逻辑:

# 去重,保留每组第一条记录
df_dedup = df.drop_duplicates(subset=["protocol_no", "activity"], keep="first")
# 执行pivot转换
result = df_dedup.pivot(index="protocol_no", columns="activity", values="description").reset_index()

两种方案均可以得到你给出的预期输出结构。


内容的提问来源于stack exchange,提问作者Guilherme Noronha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:39:00