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

如何统计Pandas DataFrame中分数高于对应科目均值的行数

解决方案

最简实现

可以直接用groupby+apply完成需求,一行代码即可输出结果,且会自动保留所有科目(无人达标时计数为0):

result = df.groupby('Subject')['Score'].apply(lambda s: (s > s.mean()).sum()).reset_index(name='high_score_stu_num')

可读性更高的分步实现

如果需要调整逻辑或者查看中间过程,也可以用transform广播科目平均分后过滤统计:

# 1. 给每行添加对应科目的平均分字段
df_with_avg = df.assign(subject_avg = df.groupby('Subject')['Score'].transform('mean'))
# 2. 过滤出分数高于科目平均分的行,按科目分组计数
result = df_with_avg[df_with_avg['Score'] > df_with_avg['subject_avg']].groupby('Subject', as_index=False).agg(high_score_stu_num=('Name', 'count'))

结果说明

用你给出的样例数据运行代码,会得到如下结果:

Subjecthigh_score_stu_num
s11
s22

和实际计算结果一致:s1平均分为92.5,仅Amy达标;s2平均分为87.5,Emma和Helen达标。

内容的提问来源于stack exchange,提问作者dorothyZhang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:15:10