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

如何使用Pandas筛选出至少两门运动成绩≥4分的学生数据集

如何使用Pandas筛选出至少两门运动成绩≥4分的学生数据集

嗨,我来帮你搞定这个问题!你目前的代码能筛选出至少一门成绩达标(≥4)的学生,但要实现至少两门的筛选,核心思路其实是统计每个学生达标的科目数量,再留下数量符合要求的记录就行,具体做法如下:

完整解决方案代码

import numpy as np
import pandas as pd

# 原始学生成绩数据
Students = {
  "Names": ["Tom", "Rick", "Sally","Sarah"],
  "Football": [4, 5, 2,1],
  "Basketball": [4, 2, 4,2],
  "Volleyball": [6, 1, 6,1],
  "Foosball": [4, 3, 4,3],
}
df = pd.DataFrame(Students)

# 1. 提取所有运动成绩列(排除姓名列)
sports_columns = df.columns.drop("Names")

# 2. 统计每个学生达标(≥4)的科目数量
# 先生成布尔矩阵:每个成绩是否达标
pass_mask = df[sports_columns] >= 4
# 按行求和,得到每个学生的达标科目数(True=1,False=0)
pass_subject_count = pass_mask.sum(axis=1)

# 3. 筛选出达标科目数≥2的学生
passed_students = df[pass_subject_count >= 2]

print(passed_students)

运行结果

Names  Football  Basketball  Volleyball  Foosball
0     Tom         4           4           6         4
2   Sally         2           4           6         4

步骤解释

  • 提取运动列:用df.columns.drop("Names")自动获取所有成绩列,哪怕以后新增运动科目,代码也不用手动修改列名,非常灵活;
  • 统计达标数量:通过布尔矩阵求和的方式,快速计算每个学生有多少门成绩达标,这种方法比手动写多个逻辑条件简洁太多;
  • 筛选符合条件的学生:最后只保留达标科目数≥2的记录,就得到了你想要的passed_students数据集。

对比你原来的代码,原来用|逻辑或只要有一门达标就会被选中,而这个方法通过统计数量精准控制了达标科目的最低要求,完全满足你的需求~

备注:内容来源于stack exchange,提问作者Tim Peyer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 16:50:25