python - 用三种不同的条件将行逐一替换为与输入顺序相同的列表
问题描述
我正在编写一个脚本,用于给学生评分。我制作了一个函数,它将成绩四舍五入/缩放到列表中最接近的值:
def roundGrade(mean_grade):
#grouped scale
grade_groups = [-3,0,2,4,7,10,12]
#round grade/scale to nearest number in grade_groups
gradesRounded = [(abs(grade-mean_grade),grade)for grade in grade_groups]
#sort rounded values
gradesRounded.sort()
return gradesRounded[0][1]
然后我需要根据三个条件计算学生的最终成绩并将它们收集到一个数组中。我想出了这段代码,但它不会计算,你们能帮助我朝正确的方向发展吗?公平地说,我对编程相当陌生,并且仍在努力学习语言和语法。
import numpy as np
import pandas as pd
from roundGrade1 import roundGrade
grades = pd.read_csv('Karakterer.csv')
def computeFinalGrades(grades):
#making a numpy array from df
arr=grades.values
#sortinig and deleting the first two columns
grades=np.sort(np.delete(arr,(0,1),axis=1))
#setting up a list for the final grades
gradesFinal=[]
for i in range(len(grades)):
#if -3 is in a row, the final grade should be = -3
if -3 in grades:
gradesFinal[i]= -3
#if there is 2 or more grades in a row, execute the procedure below
elif len(grades)>=2:
meangrade=np.delete(grades,0,axis=1)
finalgrade = np.mean(meangrade)
gradesFinal[i] = roundGrade(finalgrade)
# if there is only one value in the row, return that as the final grade
elif len(grades)==1:
gradesFinal[i] = grades
return gradesFinal
这可能是 df 的一个示例:
StudentID Name Assignment1 Assignment2 Assignment3
0 s123456 Michael Andersen 7 5 4
1 s123789 Bettina Petersen 12 3 10
2 s123468 Thomas Nielsen -3 7 2
解决方案
推荐阅读
- python - PySpark:从字符串类型列中读取嵌套 JSON 并创建列
- jquery - 引导验证器不适用于具有相同名称的动态字段
- db2 - 为什么查询没有返回任何行?
- python - 将数据从 python 导出到 csv
- c# - Unity OnTriggerEnter2D 未注册
- c# - WPF 在 XAML 中使用 Grid 显示表格
- asp.net-mvc - CSRF 令牌是否自动应用于 AspNetCore 3.+ 控制器?
- javascript - 在道具中传递对象时避免重新渲染孩子
- java - 如何使用 LocalTime 对象设置 JSpinner 的值?
- python - 无法单击按钮,因为 Selenium 无法定位元素