Определение функции для печати оценок по определенным значениям в Dataframe - PullRequest
1 голос
/ 27 февраля 2020

Я довольно новичок в Python. Я изучаю новые вещи каждый день, поэтому мой код может быть элементарным. Но любая помощь приветствуется.

Я пытаюсь определить функцию, которая будет читать файл, использовать один столбец данных и сопоставлять с ним некоторый текст.

В этом примере задачи У меня есть файл с некоторыми отметками в столбце с именем Final, и я хочу создать новый столбец фрейма данных, который будет иметь оценки по сравнению с этими окончательными отметками на основе схемы маркировки.

Вот мой код:

def reportGrade(filename):
    data=pd.read_csv(filename, sep=',')
    k=[]
    for scores in data.Final:
        if 91<=scores<=100:
            k=k.append['A']
        elif 85<=scores<91:
            k=k.append['B']
        elif 70<=scores<85:
            k=k.append['C']
        elif 0<=scores<70:
            k=k.append['D']
    for i in k:
        data['grades']=k[i]
    return (data.grades())
reportGrade("class_grades_demo.csv")

Это правильный способ сделать это. Я получаю ошибку для этого кода. Но логика c для этого кода звучит хорошо для меня. Также есть лучший способ или любой другой лучший подход к этой проблеме. Я хотя и мог использовать какую-то функцию lamda, но она не работала и не работала bisect. Пожалуйста помоги. Tnx.

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Это cut:

df['grade'] = pd.cut(df['Final'],
                     bins = [0, 70,85,91,101],
                     right=False,
                     labels=['D','C','B','A']
                    )
1 голос
/ 27 февраля 2020

Вы можете использовать np.select

import pandas as pd
import numpy as np 


df = pd.DataFrame({"final": [95,85,45,77,99,41]})

cond1 = (100 >= df["final"]) & (df["final"]>= 91)
cond2 = (90 >= df["final"]) & (df["final"]>= 81)
cond3 = (80 >= df["final"]) & (df["final"]>= 71)

df["grades"] = np.select([cond1, cond2, cond3], ["A", "B", "C"], "D")

print(df)

Выход:

  final grades
0   95  A
1   85  B
2   45  D
3   77  C
4   99  A
5   41  D

Если вы хотите, чтобы функция делала то же самое

def grade_func(data, col, new_col):
    cond1 = (100 >= data[col]) & (data[col]>= 91)
    cond2 = (90 >= data[col]) & (data[col]>= 81)
    cond3 = (80 >= data[col]) & (data[col]>= 71)

    data[new_col] = np.select([cond1, cond2, cond3], ["A", "B", "C"], "D") 

    return data

df = pd.DataFrame({"final": [95,85,45,77,99,41]})

grade_func(df, "final", "grades")

Примечание: Вы можете добавлять / удалять функциональные параметры в зависимости от ваших требований

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...