如何用Pandas的groupby()和mean()计算学生平均成绩并升序排列
计算学生平均成绩并排序的实现步骤
1. 修正原始数据结构
原代码生成的DataFrame是按班级分列的非标准格式,无法直接用于分组计算,需要先重构为包含班级、姓名、各科成绩的扁平结构:
import pandas as pd # 原始成绩数据 data = { 'S4A': { 'Name': ['Amy', 'Mandy', 'Daisy', 'Ben', 'Peter', 'John'], 'Maths': [99, 87, 88, 70, 88, 76], 'Chemistry': [89, 90, 90, 90, 89, 82], 'Physics': [79, 97, 68, 80, 72, 95], 'English': [90, 65, 56, 67, 86, 82], 'Biology': [79, 89, 59, 70, 79, 78], 'History': [75, 81, 78, 55, 68, 84] }, 'S4B': { 'Name': ['Allen', 'Gordon', 'Jimmy', 'Nancy', 'Sammy', 'William'], 'Maths': [90, 86, 88, 80, 85, 86], 'Chemistry': [89, 78, 88, 90, 79, 82], 'Physics': [89, 97, 78, 81, 82, 55], 'English': [80, 85, 86, 77, 86, 82], 'Biology': [75, 89, 69, 70, 79, 78], 'History': [79, 81, 80, 65, 68, 84] } } # 重构为标准DataFrame df_list = [] for class_name, class_data in data.items(): temp_df = pd.DataFrame(class_data) temp_df['Class'] = class_name df_list.append(temp_df) df = pd.concat(df_list, ignore_index=True) subjects = ['Maths', 'Chemistry', 'Physics', 'English', 'Biology', 'History']
2. 使用groupby()和mean()计算平均成绩
通过groupby('Name')按学生姓名分组(每个学生对应唯一分组),再对分组内的各科成绩调用mean()计算平均值:
# 分组计算每位学生的平均成绩 student_avg = df.groupby('Name')[subjects].mean(axis=1).reset_index(name='Average Score')
3. 按平均成绩升序排列
利用sort_values()方法对结果按平均成绩列升序排序:
# 升序排序 sorted_avg = student_avg.sort_values(by='Average Score', ascending=True) # 输出结果 print(sorted_avg)
最终输出示例
运行后会得到按平均成绩从低到高排列的结果,示例如下:
Name Average Score 3 Ben 72.000000 2 Daisy 73.166667 9 Nancy 77.166667 10 Sammy 81.000000 5 John 81.166667 8 Jimmy 81.500000 11 William 79.666667 4 Peter 80.333333 0 Amy 85.166667 6 Allen 83.666667 1 Mandy 84.833333 7 Gordon 86.000000
内容的提问来源于stack exchange,提问作者aunt wu
相关产品推荐
相关产品推荐

