Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于另一列中的值写入现有列_Python - Fatal编程技术网

Python 基于另一列中的值写入现有列

Python 基于另一列中的值写入现有列,python,Python,给定一组数据 'Student ID', 'Grade', 'Weight' '111112', '76', '24' '111112', '66', '14' '222223', '46', '14' '333334', '96', '18' '444445', '56', '17' 我如何遍历这些行,只选择“Grade”列,并将等效的字母Grade写入名为“字

给定一组数据

'Student ID',   'Grade',    'Weight'
'111112',       '76',       '24'
'111112',       '66',       '14'
'222223',       '46',       '14'
'333334',       '96',       '18' 
'444445',       '56',       '17'
我如何遍历这些行,只选择“Grade”列,并将等效的字母Grade写入名为“字母Grade”的新列?到目前为止,我所做的是创建新的列,但我不知道如何用从“Grade”列计算的数据填充它


首先,您必须定义从
等级
生成
字母等级
的规则。然后您可以将该规则转换为代码。我将使用一个简单的,使任何等级>=60A
P
,其他任何等级都成为
F

for student_id, grade, weight in reader:
    numeric_grade = int(grade)
    letter_grade = 'P' if numeric_grade >= 60 else 'F'
    writer.writerow((student_id, grade, weight, letter_grade))
不管你的实际规则是什么,你都应该能够想出如何写它来代替我的一行

如果您现有的代码以不同的方式迭代行—例如,在reader:中对行使用
,然后依赖
行[0]
行[1]
—那么如何调整我的一行代码以适应您正在做的事情(以及编写
行+[letter_grade]
,等等)

def get_letter_grade(分数):
#在这里定义你自己的规则

如果可以,可以使用字典或地图进行比较吗?或者单独的if语句是唯一的方法吗?一本字典的理解会起作用,但会更加乏味。这个额外的功能是我马上想到的最具魔力的方式
for student_id, grade, weight in reader:
    numeric_grade = int(grade)
    letter_grade = 'P' if numeric_grade >= 60 else 'F'
    writer.writerow((student_id, grade, weight, letter_grade))
def get_letter_grade(score):
    # define your own rules here

    if score<50:
        return "F"
    if score <60:
        return "D"
    if score<70:
        return "C"
    if score<80:
        return "B"
    return "A"

with open(args.source, 'r') as source_file, open(args.output, 'w') as output_file:
    writer = csv.writer(output_file, lineterminator='\n')
    reader = csv.reader(soure_file, delimiter=',')
    headers = next(reader)
    headers.append('Letter Grade')

    for row in reader:
        row = [i.strip().replace("'", '') for i in row]
        grade = int(row[1])
        letter_grade = get_letter_grade(grade)
        writer.writerow(row + [letter_grade])