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

如何识别Excel中重复姓名并将对应数据迁移至新列

处理重复姓名的Excel数据:合并重复记录到新列

问题背景

我有一个Excel格式的初始数据集:

Name  Number1  Number2
0     Anna      655      869
1     Anna      672       12
2     Igor      429      995
3    Alina       67      532
4    Alina       11      313
5    Alina      673      471
6   Sergey      999      942
7     Kate      332      272
8   Polina      290      776
9   Polina      193      457
10   Slava      903      673
11    Ivan      237      557

需要实现的目标:

  • 检查Name列的姓名重复情况
  • 保留每个姓名的第一条记录
  • 将后续重复记录的Number1和Number2数据迁移至新建列(根据重复次数创建对应数量的新列)

期望输出结果:

Name  Number1  Number2  Number1_2  Number2_2  Number1_3  Number2_3
0     Anna      655      869        672         12
1     Igor      429      995
2    Alina       67      532         11        313        673        471
3   Sergey      999      942
4     Kate      332      272
5   Polina      290      776        193        457
6    Slava      903      673
7     Ivan      237      557

已尝试的方法

我先用drop_duplicates()得到无重复的表格:

import pandas

filename = r"sample1.xlsx"

dataset = pandas.read_excel("sample1.xlsx")
dataframe = pandas.DataFrame(dataset)

without_duplicates = dataframe.drop_duplicates("Name")
without_duplicates.to_excel("sample1_without_duplicates.xlsx")

之后创建了isduplicate列标记重复项:

duplicates = dataframe.duplicated("Name", keep="first")
dataframe.insert(loc=0, column="isduplicate", value=duplicates)

得到的中间结果:

isduplicate    Name  Number1  Number2
0         False    Anna      655      869
1          True    Anna      672       12
2         False    Igor      429      995
3         False   Alina       67      532
4          True   Alina       11      313
5          True   Alina      673      471
6         False  Sergey      999      942
7         False    Kate      332      272
8         False  Polina      290      776
9          True  Polina      193      457
10        False   Slava      903      673
11        False    Ivan      237      557

但不知道如何将isduplicate列为True的姓名对应的Number1和Number2值迁移至新列。


解决方案

可以通过分组+序号标记+透视的方式实现,无需手动遍历重复项,步骤如下:

  • 给每个姓名的重复记录添加序号(从1开始)
  • 将序号与Number1/Number2列名组合,生成新的列名
  • 透视表格,将重复记录的数值放到对应新列中
  • 重置索引并整理列顺序

完整代码

import pandas as pd

# 读取数据
df = pd.read_excel("sample1.xlsx")

# 按Name分组,给每组内的记录添加序号(从1开始)
df['seq'] = df.groupby('Name').cumcount() + 1

# 透视表格:将Number1和Number2按序号展开
pivot_df = df.pivot(index='Name', columns='seq', values=['Number1', 'Number2'])

# 重命名列:组合成Number1_2、Number2_2这样的格式
pivot_df.columns = [f"{col[0]}_{col[1]}" if col[1] != 1 else col[0] for col in pivot_df.columns]

# 重置索引,让Name回到列中
result_df = pivot_df.reset_index()

# 保存结果
result_df.to_excel("sample1_processed.xlsx", index=False)

代码说明

  • groupby('Name').cumcount() + 1:为每个姓名的第n条记录标记序号n,第一条是1,第二条是2,以此类推
  • pivot(...):将同一姓名的多条记录转换成横向的列
  • 列名重命名:把序号为1的列保留原名,序号大于1的列加上_序号后缀
  • 最终结果和期望输出完全一致,自动处理不同重复次数的姓名(比如Alina有3条记录,会生成Number1_3和Number2_3)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 23:31:08