如何用pandas去除.xlsx重复项并将对应值迁移至新列
问题原因
你直接调用df.drop_duplicates()达不到预期效果,核心原因是这个方法默认只有整行所有字段值完全一致时,才会判定为重复行。从你要的最终效果看,你的需求不是简单删除完全重复的行,是按某几个核心标识字段(比如订单号、用户ID这类唯一识别字段)把同属一条记录的多行内容合并成单行,同一条记录下其他字段的多个不同值要做合并保留,默认的去重方法自然满足不了。
实现步骤
- 先明确你判定「多条记录属于同一条」的核心字段,比如订单号、用户ID这类不会重复的标识列
- 按核心字段做分组聚合,对不同类型的字段设置对应的聚合规则:
- 核心标识、用户姓名、时间这类同属一条记录时值完全一致的字段,直接取分组内的第一个值即可
- 标签、商品、备注这类同一条记录下可能存在多个不同值的字段,提取分组内的非重复值做拼接
- 聚合完成后导出结果即可
参考代码
import pandas as pd # 读取本地xlsx文件 df = pd.read_excel("你的原始表格路径.xlsx") # 按你的实际列名修改聚合规则 agg_config = { # 同组内值固定的列,取第一个值 "订单编号": "first", "用户姓名": "first", "下单时间": "first", # 同组内有多个不同值的列,去重后用顿号拼接 "购买商品": lambda x: "、".join(x.dropna().unique()), "订单标签": lambda x: "、".join(x.dropna().unique()) } # 按核心标识列分组聚合,这里把"订单编号"换成你自己的核心判定列 result = df.groupby("订单编号", as_index=False).agg(agg_config) # 导出处理完成的表格 result.to_excel("处理后结果.xlsx", index=False)
补充说明
如果你不需要合并同组的多值内容,只是想按指定列判断重复、重复行只保留第一行的内容,可以给drop_duplicates()传入subset参数指定判定列,不需要走分组聚合逻辑,用法如下:
# 仅按订单编号、用户姓名两列判断重复,重复项保留第一行 df_dedup = df.drop_duplicates(subset=["订单编号", "用户姓名"], keep="first")
内容的提问来源于stack exchange,提问作者SecretAgent
相关产品推荐
相关产品推荐

