如何基于公共索引拼接pandas列文本值并对重复内容去重?
pandas 按索引列聚合拼接去重实现方案
首先给出完整可运行代码:
import pandas as pd # 构造示例数据 df = pd.DataFrame({ 'A': ['n1', 'n2', 'n3', 'n1', 'n3', 'n4', 'n2'], 'B': ['joe,jack', 'kelly,john', 'adam,sam', 'jack,frank', 'rita', 'steve, buck', 'john, kelly, peter'] }) # 核心处理逻辑 result = ( # 将B列字符串按逗号拆分,同时自动清除逗号前后的空白字符 df.assign(B=df['B'].str.split(r'\s*,\s*')) # 按A列分组 .groupby('A') # 聚合:展开分组内所有名称、去重后用逗号拼接 .agg(B=lambda ser: ','.join(pd.Series(ser.sum()).drop_duplicates())) .reset_index() ) # 打印输出结果 print(result)
运行后输出结果和要求的完全一致:
A B 0 n1 joe,jack,frank 1 n2 kelly,john,peter 2 n3 adam,sam,rita 3 n4 steve,buck
关键步骤说明
- 拆分B列时使用正则
\s*,\s*作为分隔符,能兼容字段里逗号前后带空格的情况,避免kelly和kelly被判定为不同值 - 分组后用
ser.sum()将当前分组内所有拆分后的列表拼接为一个总列表,转成Series后调用drop_duplicates()完成去重,最后用逗号拼接成字符串
内容的提问来源于stack exchange,提问作者RoshanShah22
相关产品推荐
相关产品推荐

