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

基于客户权重的等额分配算法实现求助(Python Pandas)

按权重等额分配客户的Pandas实现方案

你需要将总权重100%的客户列表,均衡分配给指定数量的人员,确保每人获得的权重总和尽可能接近目标值(比如3人时约33.33%)。下面是基于Python Pandas的具体实现方案,采用贪心算法保证分配的均衡性。

实现思路

采用贪心策略:

  • 先将客户按权重从大到小排序,优先处理权重高的客户,避免小客户堆积后无法均衡分配
  • 维护一个记录各分配组当前总权重的列表,每次把当前客户加到当前总权重最小的组里
  • 最终各组权重会尽可能接近目标值

完整代码示例

import pandas as pd

# 1. 读取CSV数据(如果是本地文件,替换为pd.read_csv('your_file.csv')即可)
data = {
    'Customer': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L'],
    'Weight': [3.39, 0.86, 0.060000000000002274, 1.43, 24.66, 0.34, 24.49, 7.59, 7.24, 25.58, 3.96, 0.4]
}
df = pd.DataFrame(data)

# 2. 定义分配函数
def allocate_customers(df, num_people):
    # 按权重降序排序,优先处理大客户
    sorted_df = df.sort_values(by='Weight', ascending=False).reset_index(drop=True)
    
    # 初始化分配结果:每个元素是[客户列表, 当前总权重]
    allocations = [[[], 0.0] for _ in range(num_people)]
    
    for _, row in sorted_df.iterrows():
        customer = row['Customer']
        weight = row['Weight']
        
        # 找到当前总权重最小的组
        min_group = min(allocations, key=lambda x: x[1])
        # 添加客户到该组并更新权重
        min_group[0].append(customer)
        min_group[1] += weight
    
    # 转换为易读的字典格式
    result = {}
    for i in range(num_people):
        result[f'Person {i+1}'] = {
            'Customers': allocations[i][0],
            'Total Weight': round(allocations[i][1], 2)
        }
    
    return result

# 3. 执行分配(示例分配给3人)
num_people = 3
allocation_result = allocate_customers(df, num_people)

# 4. 打印结果
for person, details in allocation_result.items():
    print(f"{person}:")
    print(f"  客户列表: {details['Customers']}")
    print(f"  总权重: {details['Total Weight']}%\n")

代码说明

  • 数据读取:如果使用本地CSV文件,直接替换初始化数据的部分为pd.read_csv('你的客户文件路径.csv')
  • 贪心排序:降序排序是核心,优先分配大客户能避免后期出现某组权重差距过大的问题
  • 组选择逻辑:每次选择当前权重最小的组添加客户,保证各组权重逐步均衡
  • 结果格式化:返回的结果清晰展示每个人员的客户列表和总权重,方便验证分配效果

运行结果示例

Person 1:
  客户列表: ['J', 'H', 'K', 'B']
  总权重: 33.99%

Person 2:
  客户列表: ['E', 'I', 'D', 'F']
  总权重: 33.69%

Person 3:
  客户列表: ['G', 'A', 'L', 'C']
  总权重: 32.34%

三组权重非常接近目标的33.33%,满足均衡分配的需求。

内容的提问来源于stack exchange,提问作者OKAY SANDAL

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:25:50