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

如何在Pandas中结合groupby与filter统计仅通过1门考试的学生数

统计仅通过1门考试的学生数量解决方案

需求说明

从学生成绩表中统计仅通过1门考试的学生数量(通过标准:得分≥40分),同时输出每个学生的通过考试门数。

示例数据

student exam   score
123     Math   42
123     IT     39
321     Math   12
321     IT     11
333     IT     66
333     Math   77

实现步骤(Pandas)

  1. 标记每门考试是否通过
  2. 按学生分组统计通过门数
  3. 筛选并统计仅通过1门的学生数量
  4. 输出结果详情

完整代码

import pandas as pd

# 构造示例数据
data = {
    'student': [123, 123, 321, 321, 333, 333],
    'exam': ['Math', 'IT', 'Math', 'IT', 'IT', 'Math'],
    'score': [42, 39, 12, 11, 66, 77]
}
df = pd.DataFrame(data)

# 标记每门考试是否通过(≥40分为通过)
df['passed'] = df['score'] >= 40

# 按学生分组,统计每个学生的通过考试门数
student_pass_counts = df.groupby('student')['passed'].sum().astype(int)

# 统计仅通过1门考试的学生数量
target_student_count = (student_pass_counts == 1).sum()

# 输出结果
print(f"count of students = {target_student_count} #ans")
for student_id, pass_num in student_pass_counts.items():
    if pass_num == 0:
        print(f"student {student_id} 0 exams passed")
    else:
        print(f"student {student_id} has {pass_num} succeeded passed exams")

代码说明

  • 标记通过状态:新增passed布尔列,用score >=40直接判断,求和时True会被识别为1、False为0,方便统计数量。
  • 分组统计:groupby('student')['passed'].sum()按学生聚合,快速得到每个学生的通过门数。
  • 筛选目标学生:通过student_pass_counts ==1生成布尔序列,求和后得到仅通过1门的学生总数。

运行结果

count of students = 1 #ans
student 123 has 1 succeeded passed exams
student 321 0 exams passed
student 333 has 2 succeeded passed exams

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 02:22:39