如何用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
相关产品推荐
相关产品推荐

