如何用Excel或Python Pandas按姓名首字母均衡分配学生到各班级?
实现方案
该需求可通过Excel或Python Pandas两种方式实现,具体操作如下:
一、Python Pandas实现方法
操作步骤
- 读取原始Excel数据,提取学生姓名首字母
- 配置班级总数、各班目标人数规则
- 对同首字母的学生按顺序循环分配到各个班级,保证首字母分布均匀
- 校验各班总人数,微调确保符合总人数均等要求
参考代码
import pandas as pd # 1. 读取数据、提取首字母 df = pd.read_excel("你的本地Excel文件路径.xlsx") # 提取姓名首字母,统一转为大写 df["name_initial"] = df["Student name"].str.strip().str[0].str.upper() # 2. 配置班级参数,示例为12个班级,可按需修改 CLASS_TOTAL = 12 student_total = len(df) base_count = student_total // CLASS_TOTAL remainder = student_total % CLASS_TOTAL # 前remainder个班级人数为base_count+1,剩余为base_count,符合示例的人数规则 class_size = [base_count + 1 if i < remainder else base_count for i in range(CLASS_TOTAL)] # 班级编号对应,示例为A-L,可按需修改 class_list = [chr(ord('A') + i) for i in range(CLASS_TOTAL)] # 3. 按首字母均匀分配学生 # 先打乱每个首字母下的学生顺序,保证分配随机,不需要随机可删除random_state参数 df = df.groupby("name_initial", group_keys=False).apply(lambda x: x.sample(frac=1, random_state=42)).reset_index(drop=True) # 同首字母下依次分配到各个班级 df["new_section"] = df.groupby("name_initial").cumcount() % CLASS_TOTAL df["new_section"] = df["new_section"].apply(lambda x: class_list[x]) # 4. 人数校验(可选) print("各班分配后人数:") print(df["new_section"].value_counts().sort_index()) # 导出结果 df.to_excel("分班结果.xlsx", index=False)
二、Excel实现方法
- 新增辅助列提取姓名首字母:假设学生姓名在A列,第二行起输入公式
=UPPER(LEFT(A2,1)),下拉填充所有行 - 按首字母辅助列排序,让相同首字母的学生连续排列
- 新增班级分配辅助列:对每个首字母分组的行,依次输入1、2…12循环填充,比如首字母A的89名学生,按顺序填1到12,重复循环直到该首字母所有学生分配完成
- 所有学生分配完成后,按班级分配辅助列排序,对应数字转为A-L的班级编号即可
- 最后校验各班总人数,若有少量偏差手动微调1-2名学生的班级即可
内容的提问来源于stack exchange,提问作者Pritam Kundu
相关产品推荐
相关产品推荐

