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

如何在不聚合的情况下对含重复索引的长格式DataFrame进行Pivot操作

解决Pandas长表转宽表保留重复行的问题

你遇到的重复索引错误,核心原因是pivot/pivot_table要求用作行索引的列组合必须唯一,但你的数据中同一Run ID+Accession ID+Analyte存在多条检测记录,导致索引重复。要保留所有重复行,只需先给每组重复行添加唯一序号,再执行转宽操作:

步骤1:添加分组内序号列

先确定需要保留的行标识列(比如Run ID、Accession ID,以及其他不需要转成列的字段),给每组重复行生成一个递增序号,确保索引唯一:

# 替换为你实际需要保留的行标识列
group_cols = ['Run ID', 'Accession ID', 'Sample Date', '其他需要保留的列']
df['seq'] = df.groupby(group_cols).cumcount()

步骤2:执行转宽操作

用pivot将Analyte转为列,此时包含seq的索引组合已经唯一,不会触发重复索引错误:

wide_df = df.pivot(
    index=group_cols + ['seq'],
    columns='Analyte',
    values='Concentration'
).reset_index()

步骤3:清理结果(可选)

如果不需要seq列区分重复行,可以直接删除;如果需要保留用来标记同一标识下的多次检测,也可以保留:

# 删除seq列
wide_df = wide_df.drop(columns='seq')

这样得到的宽表会完整保留所有重复的检测记录,每个Run ID+Accession ID下的多次检测值会以独立行的形式存在,对应Analyte列会填充各自的Concentration值,无值的位置会显示NaN。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 15:20:29