如何使用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
相关产品推荐
相关产品推荐

