Pandas DataFrame合并重复行并按唯一ID汇总去重关联字段的方法
解决方案
核心是在groupby聚合时对Constituency Code列先做去重再拼接,不用逐行遍历,完整实现代码如下:
import pandas as pd # 假设原始数据已读入变量df result = df.groupby( # 因为Unique_ID和Name一一对应,同时作为分组键避免额外处理Name列 ['Unique_ID', 'Name'], as_index=False )['Constituency Code'].agg( # 对每个分组的编码值先去重,再用逗号+空格拼接 lambda x: ', '.join(x.unique()) )
如果你之前使用groupby+agg未得到预期结果,通常是遗漏了unique()去重步骤,直接拼接会把重复的取值也保留到结果中。
如果需要拼接后的编码按固定顺序排列,可在unique()后加sorted():
lambda x: ', '.join(sorted(x.unique()))
完整测试验证代码
你可以用以下代码直接运行验证效果:
import pandas as pd # 构造和你示例一致的原始数据 data = { "Unique_ID": [404, 404, 404, 659, 1025, 1025], "Name": ["Mark", "Mark", "Mark", "Julio", "Jasmine", "Jasmine"], "Constituency Code": ["Teacher", "Staff", "Staff", "Student", "Staff", "Student"] } df = pd.DataFrame(data) # 执行聚合 result = df.groupby(['Unique_ID', 'Name'], as_index=False)['Constituency Code'].agg( lambda x: ', '.join(x.unique()) ) # 打印结果 print(result)
运行后输出和你预期的结果完全一致。
内容的提问来源于stack exchange,提问作者Syed Jacob Jilany
相关产品推荐
相关产品推荐

