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

pandas合并同ID同日期Pr值时pivot报重复索引错误如何修复

报错原因

代码触发重复索引报错的核心原因是pivot方法要求传入的index和columns组合必须对应唯一值,原代码仅把ID设为索引、Date restock设为列,没有把Date order纳入分组维度,同一个索引+列组合下本来就存在2条Pr记录,自然无法完成reshape操作。除此之外原代码还有两个明显错误:

  • groupby的列参数多嵌套了一层方括号,会被pandas识别为单个列表值作为分组键,完全无法按三个字段的组合分组
  • 整体逻辑没有对齐需求:既没有保留Date order字段,也没有提取第一条记录的Infos字段,Pr_1、Pr_2的拆分逻辑也不成立
修复方案

由于明确每个ID+Date order+Date restock分组固定对应2条记录,直接给分组内的记录按出现顺序打序号,再透传成列即可,代码如下:

# 给每个分组内的记录按原始顺序生成1、2的序号
a['seq'] = a.groupby(['ID', 'Date order', 'Date restock']).cumcount() + 1

# 把同一分组的两个Pr值透传为Pr_1、Pr_2列
pr_part = a.pivot(
    index=['ID', 'Date order', 'Date restock'],
    columns='seq',
    values='Pr'
).add_prefix('Pr_').reset_index()

# 提取每个分组第一条记录的Infos字段,和Pr部分合并得到最终结果
out = pr_part.merge(
    a[a['seq'] == 1][['ID', 'Date order', 'Date restock', 'Infos']],
    on=['ID', 'Date order', 'Date restock'],
    how='left'
)

最终输出的out每行对应唯一的分组,包含字段:ID、Date order、Date restock、Pr_1、Pr_2、Infos,完全匹配需求。

如果需要明确指定组内哪条作为第一条记录取Pr_1和Infos,可以在生成seq列之前,先按你的排序规则对DataFrame做排序,比如按记录入库时间、Infos字段取值等排序后再生成序号。

内容的提问来源于stack exchange,提问作者Cherry cherry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:24:34