我有一个pandas数据框,其中包含已尝试过的课程列表:学生的ID,课程ID,尝试的术语以及他们收到的成绩。看起来有点像:
Student ID Course ID Academic Term Final Grade
N99999 MAT101 201501 2.0
N99999 MAT101 201509 2.5
N11111 CHE101 201609 3.0
N11111 PSY101 201601 0.0
N11111 PSY101 201701 2.0
我有兴趣分析他们的成绩以及学生是否通过重复课程而得到提高。
为此,我想添加一个尝试'列,其中每个组合课程和ID号的最低期限值的行将获得1,下一个为2,等等。
Student ID Course ID Academic Term Final Grade Attempt
N99999 MAT101 201501 2.0 1
N99999 MAT101 201509 2.5 2
N11111 CHE101 201609 3.0 1
N11111 PSY101 201601 0.0 1
N11111 PSY101 201701 2.0 2
我将如何做到这一点?
谢谢。
答案 0 :(得分:3)
您似乎正在寻找标准分区。有几种方法可以做到这一点,但我已经采用以下方式。尝试以下(注意我更改/压缩了一些数据):
df
输出:
student_id course_id academic_term final_grade
0 n999 mat101 201501 2.0
1 n999 mat101 201509 2.5
2 n111 che101 201609 3.0
3 n111 psy101 201601 0.0
4 n111 psy101 201701 2.0
输入
df['attempt'] = df.sort_values('academic_term').groupby(['student_id', 'course_id'], sort=False).cumcount()+1
输出:
student_id course_id academic_term final_grade attempt
0 n999 mat101 201501 2.0 1
1 n999 mat101 201509 2.5 2
2 n111 che101 201609 3.0 1
3 n111 psy101 201601 0.0 1
4 n111 psy101 201701 2.0 2