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

如何在Pandas中查找重复项并将对应值转换为多列展示?

解决Pandas中重复项对应值转多列的问题

要实现将重复name对应的value拆分为多列展示的需求,可以通过分组标记序号+透视转宽表的方式完成,以下是具体步骤和代码:

完整实现代码

import pandas as pd

df = pd.DataFrame(
    [
        ['A',1],
        ['B',2],
        ['C',3],
        ['D',4],
        ['E',5],
        ['C',6],
        ['D',7],
        ['E',8],
        ['F',9],
        ['G',10]
        
    ],columns=['name','value'])

# 1. 筛选出存在重复的name记录
df_dup = df[df.duplicated(['name'], keep=False)]

# 2. 为每个name下的value添加序号(1、2...)
df_dup['col_num'] = df_dup.groupby('name').cumcount() + 1

# 3. 透视转换为宽表,并调整列名
result = df_dup.pivot(index='name', columns='col_num', values='value').reset_index()
result.columns = ['name'] + [f'value{i}' for i in result.columns[1:]]

# 4. 同步原数据中每个name首次出现的索引(可选,匹配期望输出的索引)
result.index = df_dup.groupby('name').first().index

print(result)

代码解释

  • 筛选重复项:使用duplicated(keep=False)保留所有存在重复的name行,和你原有代码逻辑一致。
  • 添加组内序号:groupby('name').cumcount()会为每个name分组内的行生成从0开始的序号,加1后得到1、2,后续用来作为列名的后缀。
  • 透视转宽表:pivot方法将长格式数据转为宽格式,把每个name对应的多个value拆分成单独的列。
  • 调整列名与索引:将自动生成的列名(1、2)改为value1、value2,同时设置结果索引为原数据中每个name第一次出现的索引,和期望输出完全匹配。

最终输出

name  value1  value2
2    C       3       6
3    D       4       7
4    E       5       8

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 04:53:09