接上篇继续,记得小时候读书那会儿,还没有双减,每次考试完,大家最关心的就是全班的成绩分布,假如有下面一张成绩表:
老师们通常很快就会算出『平均分、总分』这些关键指标,然后各班之间,就开始攀比:
当然,这些在Excel里用SUM/AVERAGE函数,再结合自动填充很容易实现,pandas里要如何类似统计呢?
import pandas as pd
# 注意:先不要设置索引(否则最后append时会有问题)
score = pd.read_excel("./data/test.xlsx")
print(score)
# 把各科分数列先取出来
temp = score[['语文', '数学', '科学', '英语']]
print("\n--------各科分数--------")
print(temp)
# 原表上,新增总分、平均分列,并按行统计
score["总分"] = temp.sum(axis=1)
score["平均分"] = temp.mean(axis=1)
print("\n--------每行添加[总分,平均分]--------")
print(score)
# 按列计算平均分
col_avg = score[['语文', '数学', '科学', '英语', '总分', '平均分']].mean()
# 将得到的Serial追加到score表
score = score.append(col_avg, ignore_index=True)
print("\n--------最终结果-------")
print(score)
结果:
学号 语文 数学 科学 英语
0 张三 85 90 88 92
1 李四 78 86 90 82
2 王五 95 96 89 80
3 赵六 70 75 99 67
4 杨七 95 93 84 91
--------各科分数--------
语文 数学 科学 英语
0 85 90 88 92
1 78 86 90 82
2 95 96 89 80
3 70 75 99 67
4 95 93 84 91
--------每行添加[总分,平均分]--------
学号 语文 数学 科学 英语 总分 平均分
0 张三 85 90 88 92 355 88.75
1 李四 78 86 90 82 336 84.00
2 王五 95 96 89 80 360 90.00
3 赵六 70 75 99 67 311 77.75
4 杨七 95 93 84 91 363 90.75
--------最终结果-------
学号 语文 数学 科学 英语 总分 平均分
0 张三 85.0 90.0 88.0 92.0 355.0 88.75
1 李四 78.0 86.0 90.0 82.0 336.0 84.00
2 王五 95.0 96.0 89.0 80.0 360.0 90.00
3 赵六 70.0 75.0 99.0 67.0 311.0 77.75
4 杨七 95.0 93.0 84.0 91.0 363.0 90.75
5 NaN 84.6 88.0 90.0 82.4 345.0 86.25