如何用Pandas按课程分组统计各字母成绩的人数?
用Python统计各课程字母成绩人数的解决方案
前置准备
确保已安装pandas(未安装则执行命令:pip install pandas),它能高效完成分组统计需求。
完整代码示例
1. 衔接你已有的numpy数据(数据已在DataFrame中可跳过此步)
假设你已经用numpy生成了字母成绩列,先把所有数据转成pandas的DataFrame:
import numpy as np import pandas as pd # 替换成你实际的numpy数组 students = np.array(['张三', '李四', '王五', '赵六', '孙七']) scores = np.array([85, 92, 60, 55, 40]) courses = np.array(['会计学', '大学代数', '会计学', '大学代数', '大学代数']) # 你已用numpy生成的字母成绩列 letter_grades = np.array(['B', 'A', 'C', 'D', 'F']) # 转换为DataFrame df = pd.DataFrame({ '学生': students, '当前分数': scores, '课程': courses, '字母成绩': letter_grades })
2. 分组统计各课程的字母成绩人数(包含计数为0的等级)
# 定义需要统计的所有字母等级,确保不会遗漏 grade_levels = ['A', 'B', 'C', 'D', 'F'] # 按课程分组,统计每个等级的人数,缺失等级填充0 grade_stats = df.groupby('课程')['字母成绩'].value_counts().unstack(fill_value=0)[grade_levels] # 按你需要的格式输出结果 for course, counts in grade_stats.iterrows(): # 筛选出计数大于0的等级,拼成指定格式 result_items = [f"{grade}={count}" for grade, count in counts.items() if count > 0] result_str = "、".join(result_items) print(f"{course} {result_str}")
代码说明
groupby('课程')['字母成绩'].value_counts():按课程分组后,统计每组内各字母成绩的出现次数unstack(fill_value=0):将行级统计结果转为列,缺失的字母等级自动填充0,保证A-F每个等级都被统计[grade_levels]:强制指定列的顺序为A、B、C、D、F,避免顺序混乱- 最终输出示例:
会计学 B=1、C=1 大学代数 A=1、D=1、F=1
内容的提问来源于stack exchange,提问作者Hank Hargis
相关产品推荐
相关产品推荐

