如何基于包含人员姓名职位的CSV文件生成各职位1人的随机分组
最高效实现方案(Python + Pandas,单脚本即可完成,全流程耗时不超过10秒)
整体逻辑是先按职位拆分数据集、分别随机打乱,再按索引对齐分配分组编号,最后合并输出,时间复杂度为O(n),适合任意规模的人员数据处理。
操作步骤
- 第一步:读取原始CSV,按四类职位拆分出4个独立的人员列表,各自执行随机排序
- 第二步:取4个职位列表的最小长度作为可生成的最大组数(总人数55不是4的整数倍,必然存在剩余人员,剩余人员分组可标注为未分组)
- 第三步:给每个职位列表的前N个成员(N为最大组数)分配从1到N的分组编号,剩余成员统一标注分组为未分组
- 第四步:合并所有人员数据,输出带分组列的新CSV即可
可直接运行的代码
import pandas as pd import random # 1. 读取原始数据 df = pd.read_csv("你的原始文件路径.csv") # 2. 按职位拆分并随机打乱 pos_list = ["Producer", "Director", "Volunteer", "Tech"] pos_dfs = {} for pos in pos_list: pos_df = df[df["职位"] == pos].copy().sample(frac=1).reset_index(drop=True) pos_dfs[pos] = pos_df # 3. 计算最大可分组数 max_group = min(len(v) for v in pos_dfs.values()) # 4. 分配分组编号 result_list = [] for pos, pos_df in pos_dfs.items(): # 前max_group个分配分组 pos_df.loc[:max_group-1, "分组"] = pos_df.loc[:max_group-1].index + 1 # 剩余的标注未分组 pos_df.loc[max_group:, "分组"] = "未分组" result_list.append(pos_df) # 5. 合并并输出 final_df = pd.concat(result_list).reset_index(drop=True) final_df.to_csv("分组结果.csv", index=False, encoding="utf-8-sig")
可选调整规则
如果需要把剩余人员也分配到现有组中,可以在上述代码基础上,给剩余人员随机匹配1到max_group的分组编号即可,不会破坏原有组的四类职位各1人的基础规则。
内容的提问来源于stack exchange,提问作者Jorge Gomes
相关产品推荐
相关产品推荐

