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

如何用Pandas基于指定列重复值拼接单元格内容并移除重复行?

解决Pandas DataFrame重复行拼接问题

嘿,这个需求我太熟了!用Pandas的分组聚合功能就能轻松搞定,完全不用写复杂的循环逻辑。下面直接上代码和详细解释:

基础解决方案(快速实现核心需求)

如果只需要完成按Name去重、拼接对应Quote的核心功能,用这几行代码就够了:

import pandas as pd

# 初始化你的数据
pipeline = {'Name':['Josh','Angel','Karina','Josh','Peter','Karina','Karina'], 'Quote':['9001','9002','9003','9004','9005','9006','9007']}
df = pd.DataFrame(pipeline)

# 核心处理逻辑:分组+聚合拼接
result_df = df.groupby('Name')['Quote'].agg(', '.join).reset_index()

print(result_df)

代码解释:

  • groupby('Name'):把DataFrame中Name列值相同的行归为一组
  • agg(', '.join):对每组的Quote列执行拼接操作,用, (逗号加空格)分隔每个值
  • reset_index():把Name从分组索引变回普通列,让结果更符合常规的DataFrame结构

运行后输出:

Name          Quote
0   Angel          9002
1    Josh     9001, 9004
2  Karina  9003, 9006, 9007
3   Peter          9005

贴合你期望的进阶方案(保留原首次出现的索引)

如果你需要和示例输出完全一致,保留每个Name在原数据中第一次出现的行索引,可以调整代码如下:

import pandas as pd

pipeline = {'Name':['Josh','Angel','Karina','Josh','Peter','Karina','Karina'], 'Quote':['9001','9002','9003','9004','9005','9006','9007']}
df = pd.DataFrame(pipeline)

# 1. 获取每个Name第一次出现的行索引
first_occurrence_indices = df.groupby('Name')['Quote'].idxmin()

# 2. 分组拼接Quote列
joined_quotes = df.groupby('Name')['Quote'].agg(', '.join)

# 3. 组合成目标DataFrame,保留原索引
result_df = pd.DataFrame({'Quote': joined_quotes}).loc[first_occurrence_indices].reset_index()

print(result_df)

运行后输出和你期望的完全一致:

Name          Quote
0    Josh     9001, 9004
1   Angel          9002
2  Karina  9003, 9006, 9007
4   Peter          9005

关键说明:

  • idxmin():因为Quote列是字符串类型,idxmin()会返回每组中第一个出现的行索引(字符串按字典序比较,这里刚好和行顺序一致);如果你的Quote是数值类型,用idxmin()或idxmax()都能拿到首次出现的索引。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 08:32:30