如何聚合DataFrame唯一组合并按指定顺序重新排序?
按指定顺序合并分组后的唯一值
原始数据
import pandas as pd df = pd.DataFrame({'CLASS': ['A', 'B', 'A'], 'MEMBERS': ['foo & bar', 'bar & luz', 'baz']}) print(df) # CLASS MEMBERS # 0 A foo & bar # 1 B bar & luz # 2 A baz
需求
按CLASS列分组,合并MEMBERS列的唯一值,且合并后的内容需按指定顺序['foo', 'bar', 'baz', 'luz']排列。
已完成步骤(顺序不符合要求)
通过分组聚合实现了去重合并,但结果顺序随机:
result = df.groupby('CLASS')['MEMBERS'].agg(lambda s: " & ".join(set(' & '.join(s).split(' & ')))) print(result) # CLASS # A foo & baz & bar # B luz & bar # Name: MEMBERS, dtype: object
解决方案
自定义聚合函数,先拆分去重,再按指定顺序筛选成员后合并:
# 定义指定顺序列表 target_order = ['foo', 'bar', 'baz', 'luz'] def aggregate_members(group): # 拆分组内所有成员并去重 all_members = set(' & '.join(group).split(' & ')) # 按目标顺序筛选存在的成员 ordered_members = [member for member in target_order if member in all_members] # 合并为指定格式的字符串 return " & ".join(ordered_members) # 执行分组聚合 final_result = df.groupby('CLASS')['MEMBERS'].agg(aggregate_members) print(final_result) # CLASS # A foo & bar & baz # B bar & luz # Name: MEMBERS, dtype: object
说明
核心逻辑是利用目标顺序列表做有序筛选:遍历预设的顺序,只保留当前组中存在的成员,这样既保证了去重,又严格遵循指定的排列顺序,最后再用&连接成字符串即可得到预期结果。
内容的提问来源于stack exchange,提问作者VERBOSE
相关产品推荐
相关产品推荐

