首页 > 解决方案 > 如何计算作业成绩(价值 20%)和考试成绩(价值 30%)并将其显示在新列中作为最终成绩?

问题描述

这是我需要做的:

  1. 在 df 中创建一个名为“Final Score”的新列
  2. 这将包含学生所有作业和考试的综合分数
  3. 使用这个规则:每项作业占成绩的 20%,每门考试占 30%

我尝试将分配分数字符串转换为 int 但一直说不能转换。我在将作业和考试成绩相乘时遇到问题。错误:不能将字符串和整数相乘

原始 df 如下所示:

"""
Student ID  Assignment Name   Score
abcd1234    assignment 1      76.52
efgh5678    exam 1            67.22
abcd1234    assignment 2      88.46
...
etc.
"""

我映射了相似的值并进行了旋转:

mapping = {
  'exam 1' : 'Exam 1',
  'test 1' : 'Exam 1',
  'exam 2' : 'Exam 2',
  'test #2' : 'Exam 2',
  'assignment 1' : 'Assignment 1',
  'homework 1' : 'Assignment 1',
  'first assignment' : 'Assignment 1',
  'assignment 2' : 'Assignment 2',
  'assignment #2' : 'Assignment 2',
  'HW 2' : 'Assignment 2',
}

def map_value(value):
  return mapping[value] if value in mapping else value

x = lambda value: mapping[value] if value in mapping else value

df.loc[:, 'Assignment Name'] = df['Assignment Name'].apply(x)
pivot = df.pivot(index='Student ID', columns='Assignment Name', values='Score')

print (pivot)

这是 print(pivot) 数据的样子:

"""
Assignment Name    Assignment 1  Assignment 2  Exam 1  Exam 2
Student ID
abcd1234            76.52        79.23         88.46   87.31
...

我需要它看起来像这样:

"""
Student ID  Assignment 1  Exam 1  Assignment 2  Exam 2
abcd1234    76.52         79.23   88.46         87.31
efgh5678    86.11         67.22   75.45         77.20
...
etc.
"""

另外,我不知道如何继续执行以下操作:

  1. 在 df 中创建一个名为“Final Score”的新列
  2. 这将包含学生所有作业和考试的综合分数
  3. 使用这个规则:每项作业占成绩的 20%,每门考试占 30%

我需要我的最终数据如下所示:

"""
Student ID  Assignment 1  Exam 1  Assignment 2  Exam 2  Final Score
abcd1234    76.52         79.23   88.46         87.31   82.96
efgh5678    86.11         67.22   75.45         77.20   75.64
...
etc.
"""

谢谢

标签: pythonpivotpivot-table

解决方案


推荐阅读