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

基于Score值优化Client与Manager的唯一组合分配方案问询

客户-经理匹配解决方案(基于分数优先级)

需求说明

现有3位经理、6位客户,需为每位经理分配2位唯一的客户,分配规则如下:

  • 按Score从高到低排序,优先匹配分数最高的组合
  • 若某客户已被其他经理匹配,则当前经理需选择该客户的次优分数组合,以此类推,直到每位经理都分到2个唯一客户

原始数据

index       Client  Manager   Score
0             1        1      0.89
1             1        2      0.78
2             1        3      0.65
3             2        1      0.91
4             2        2      0.77
5             2        3      0.97
6             3        1      0.35
7             3        2      0.61
8             3        3      0.81
9             4        1      0.69
10            4        2      0.22
11            4        3      0.93
12            5        1      0.78
13            5        2      0.55
14            5        3      0.44
15            6        1      0.64
16            6        2      0.99
17            6        3      0.22

期望输出

index  Client   Manager  Score
0        1        1      0.89
1        2        3      0.97
2        3        2      0.61
3        4        3      0.93
4        5        1      0.78
5        6        2      0.99

解决方案(Pandas实现)

核心思路是先按分数降序排序,依次筛选符合条件的组合:客户未被分配、对应经理还未凑齐2个名额,直到所有经理都完成分配。

import pandas as pd

# 构造原始数据
df = pd.DataFrame({
    'Client': [1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6],
    'Manager': [1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3],
    'Score': [0.89,0.78,0.65,0.91,0.77,0.97,0.35,0.61,0.81,0.69,0.22,0.93,0.78,0.55,0.44,0.64,0.99,0.22]
})

# 按分数从高到低排序,优先处理高分组合
df_sorted = df.sort_values('Score', ascending=False).reset_index(drop=True)

# 初始化跟踪状态:已分配的客户、各经理已分配数量
assigned_clients = set()
manager_counts = {1: 0, 2: 0, 3: 0}
result_list = []

# 遍历排序后的组合,筛选符合条件的记录
for _, row in df_sorted.iterrows():
    client = row['Client']
    manager = row['Manager']
    # 客户未被占用,且当前经理还能分配
    if client not in assigned_clients and manager_counts[manager] < 2:
        result_list.append(row)
        assigned_clients.add(client)
        manager_counts[manager] += 1
    # 所有经理都分到2个客户就停止循环
    if all(count == 2 for count in manager_counts.values()):
        break

# 整理结果,按客户排序对齐期望输出
result_df = pd.DataFrame(result_list).sort_values('Client').reset_index(drop=True)
print(result_df)

运行代码后即可得到与期望一致的输出结果。


内容的提问来源于stack exchange,提问作者Dan Richardson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:10:25