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

如何聚合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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 11:13:23