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

如何用Excel或Python Pandas按姓名首字母均衡分配学生到各班级?

实现方案

该需求可通过Excel或Python Pandas两种方式实现,具体操作如下:

一、Python Pandas实现方法

操作步骤

  1. 读取原始Excel数据,提取学生姓名首字母
  2. 配置班级总数、各班目标人数规则
  3. 对同首字母的学生按顺序循环分配到各个班级,保证首字母分布均匀
  4. 校验各班总人数,微调确保符合总人数均等要求

参考代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:15:01