合并df2和df1中的随机选择值

时间:2019-05-23 08:32:41

标签: pandas python-2.7

所以我有一个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.

但是我不确定如何将这两个结合起来以获得预期的结果。非常感谢您的帮助。预先感谢。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用列表理解中的numpy.hstack创建您的array随机课程,然后Index.repeatDataFrame.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