Pandas如何按平均成绩条件新增Final Grade列标记及格/不及格
问题根因
你写的代码存在两个核心问题:
- Python原生的
if/else分支仅支持对单个布尔值做判断,而df_exams.loc[(df_exams['Average Grade'] >= 75)]返回的是所有满足分数条件的行子集,是DataFrame对象,不是单个True/False布尔值,直接放在if后会触发真值判断歧义报错。 - 你定义的不通过分支返回值是
'FAIL',和需求要求的'FAILED'字符串不一致,就算逻辑跑通结果也不符合要求。
正确实现方法
以下两种是pandas做条件赋值最常用的方案,按需选择即可:
- 方案1:
numpy.where(性能最优,推荐万行以上数据集使用)
先导入numpy库,再做逐元素条件判断赋值:import numpy as np df_exams['Final Grade'] = np.where( df_exams['Average Grade'] >= 75, 'PASSED', 'FAILED' ) - 方案2:列表推导式(无需额外导包,逻辑最贴合新手直觉)
直接遍历Average Grade列的每个值做判断,生成新列:df_exams['Final Grade'] = ['PASSED' if s >= 75 else 'FAILED' for s in df_exams['Average Grade']]
结果校验
运行代码后可以执行下面的语句随机抽查10行结果,确认赋值逻辑正确:
print(df_exams[['Average Grade', 'Final Grade']].sample(10))
内容的提问来源于stack exchange,提问作者Jj Encrypt
相关产品推荐
相关产品推荐

