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

Pandas多字段透视含重复值DataFrame报错解决

解决DataFrame透视时重复值引发的ValueError问题

问题说明

现有一个DataFrame需要转换为指定格式,但因存在重复条目,调用pivot()时触发错误:ValueError: Index contains duplicate entries, cannot reshape。

示例数据

原始DataFrame的生成代码:

import pandas as pd

dummy_data = {
'Field_Names': ['Field_1','Field_2','Field_3','Field_1','Field_2','Field_3'],
'Field_Values': ['Bob','STL','1234','Eric','DSM','5678'],
'Record_ID': ['abc123','abc123','abc123','abc123','abc123','abc123']
}
dummy_df = pd.DataFrame(dummy_data)
display(dummy_df)

期望输出

目标格式的DataFrame生成代码:

details = {'Field_1': ['Bob', 'Eric'],
           'Field_2': ['STL', 'DSM'],
           'Field_3': ['1234', '5678'],
           'Field_ID': ['abc123','abc123']}

desired_output = pd.DataFrame(details)
display(desired_output)

尝试过的无效方法

  1. 分组后转列表的方式未得到预期结构:
final_df = dummy_df.groupby('Field_Names')['Field_Values','Record_Id'].apply(list)
final_df = pd.DataFrame({i:final_df.loc[i] for i in final_df.index.to_list()})
  1. 直接调用pivot()触发重复值错误:
dummy_df.pivot(index='Record_ID', columns='Field_Names', values='Field_Values').reset_index()

解决方案

问题根源在于pivot()要求index + columns的组合必须唯一,原始数据中同一个Record_ID对应多组相同的Field_Names,导致组合重复。解决方法是给每组重复条目添加一个组内序号,确保组合唯一:

步骤1:添加组内序号

# 给Record_ID+Field_Names的每组重复条目添加行号
dummy_df['row_num'] = dummy_df.groupby(['Record_ID', 'Field_Names']).cumcount()

步骤2:执行透视并整理结构

# 以Record_ID+row_num作为索引进行透视
final_df = dummy_df.pivot(
    index=['Record_ID', 'row_num'],
    columns='Field_Names',
    values='Field_Values'
).reset_index()

# 重命名列并移除临时行号列
final_df = final_df.rename(columns={'Record_ID': 'Field_ID'}).drop('row_num', axis=1)
display(final_df)

执行后即可得到与期望输出一致的结果。

内容的提问来源于stack exchange,提问作者Carson Whitley

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 13:30:46