所以我有一个Student
数据框,
ID,STUDENT_ID
1,0123
2,9876
3,4567
4,2986
和这样的Courses
数据框,
ID,COURSE_ID
990,CourseA
991,CourseB
992,CourseC
我想做的是 从“课程”数据框中随机选择任何2个COURSE_ID,并以以下格式将其附加到每个单独的STUDENT_ID中 。
ID,STUDENT_ID,COURSE_ID
1,0123,CourseA
2,0123,CourseB
3,9876,CourseB
4,9876,CourseC
5,4567,CourseA
6,4567,CourseC
7,2986,CourseA
8,2986,CourseC
基本上,我必须为每个STUDENT_ID
创建1个副本。然后,在选择2个随机COURSE_IDs
之后,将其一个一个地附加到STUDENT_ID
上。我只需要确保为每个COURSE_IDs
随机选择的STUDENT_ID
始终是唯一的,即,学生应该不两次接受同一课程。
我知道我可以使用
df1 = df1.append([df1]*1, ignore_index=True)
df1['ID'] = np.arange(1, len(df1) + 1)
df1.sort_values(['STUDENT_ID'], inplace=True)
复制我的STUDENT_IDs
。
我也知道我可以使用
df2.sample(2)
随机选择2个COURSE_IDs.
但是我不确定如何将这两个结合起来以获得预期的结果。非常感谢您的帮助。预先感谢。
答案 0 :(得分:0)
您可以尝试使用列表理解中的numpy.hstack
创建您的array
随机课程,然后Index.repeat
和DataFrame.assign
创建所需的输出:
import numpy as np
rand_courses = np.hstack([Courses['COURSE_ID'].sample(2).values for i in range(len(Student))])
Student.loc[Student.index.repeat(2)].assign(COURSE_ID=rand_courses, ID=np.arange(len(Student)*2) + 1)
[出]
ID STUDENT_ID COURSE_ID
0 1 123 CourseA
0 2 123 CourseC
1 3 9876 CourseB
1 4 9876 CourseA
2 5 4567 CourseA
2 6 4567 CourseB
3 7 2986 CourseB
3 8 2986 CourseA