首页 > 解决方案 > 用三种不同的条件将行逐一替换为与输入顺序相同的列表

问题描述

我正在编写一个脚本,用于给学生评分。我制作了一个函数,它将成绩四舍五入/缩放到列表中最接近的值:

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

标签: pythonpandasnumpy

解决方案


推荐阅读