如何按客户规模将字典中的销售代表平均分配至DataFrame列?
均匀分配销售代表到对应规模客户的解决方案
要实现按客户规模分组,将对应组的销售代表均匀分配(使每个销售负责的同规模客户数尽可能一致),可以通过groupby结合循环迭代器来实现,替代直接用map的方式。
步骤1:定义销售代表分组字典
首先确保你的销售代表字典格式正确,键为客户规模,值为对应销售代表列表:
sales_reps = { 'Large': ['Jackson', 'Stevens', 'Miller'], 'Medium': ['James', 'Samuels', 'Shandler'], 'Small': ['Fast', 'Shorter'] }
步骤2:编写分配函数并应用到分组数据
使用itertools.cycle创建销售代表的循环迭代器,再通过groupby对每个客户规模组单独分配:
import pandas as pd from itertools import cycle def assign_sales_rep(group): # 获取当前分组的客户规模 client_size = group['Client Size'].iloc[0] # 创建对应销售代表的循环迭代器 rep_cycle = cycle(sales_reps[client_size]) # 为分组内每一行分配销售代表 group['Sales Rep'] = [next(rep_cycle) for _ in range(len(group))] return group # 对DataFrame按Client Size分组后应用分配函数 df = df.groupby('Client Size', group_keys=False).apply(assign_sales_rep)
步骤3:验证分配结果
可以通过统计每个规模下各销售的客户数量,确认分配是否均匀:
for size in sales_reps.keys(): print(f"--- {size} 客户分配统计 ---") print(df[df['Client Size'] == size]['Sales Rep'].value_counts())
输出结果中,同规模下每个销售的客户数要么完全相等,要么仅相差1(当客户总数无法被销售人数整除时),符合均匀分配的要求。
内容的提问来源于stack exchange,提问作者reenum
相关产品推荐
相关产品推荐

