在将某些值添加到排序列表时遇到了一些麻烦。 我有两个数据框,如下所示: 第一个是df_ordenaleatorio(原始DF),具有45000行,这是其格式的摘要。
id qwe nivel num_orden
17312 40914720 516 1107300 29
22231 41682691 516 1107300 11
22875 41793014 516 1107300 22
24797 42154820 516 1107300 32
25258 42478054 516 1107300 5
25315 42519052 516 1107300 1
26098 43119817 516 1107300 35
26268 43201796 516 1107300 4
26495 43301451 516 1107300 37
26529 43313762 516 1107300 31
26937 43413528 516 1107300 28
26957 43425220 516 1107300 15
26964 43425466 516 1107300 36
27568 43539349 516 1107300 38
27605 43552829 516 1107300 7
27643 43565565 516 1107300 19
27868 43608550 516 1107300 13
27875 43609319 516 1107300 27
28094 43651052 516 1107300 8
28371 43718414 516 1107300 20
28491 43746553 516 1107300 45
28515 43748545 516 1107300 10
28711 43802508 516 1107300 46
28915 43832421 516 1107300 18
28922 43833155 516 1107300 43
28967 43846105 516 1107300 25
29407 43931105 516 1107300 9
29443 43944652 516 1107300 42
29482 43958493 516 1107300 16
30307 44139221 516 1107300 21
每对{qwe,nivel}都有许多不同的ID,并且每个ID都有不同的num_orden。为了给问题提供一些背景信息,id是一个人的身份,{qwe,nivel}对是特定大学中的一门课程。 Num_orden是大学表示的相对偏好。例如,如果申请人id 1为1,因为num_orden是一个{qwe,nivel},则意味着该人优先进入该大学学习该课程。 每对{qwe_nivel}的申请人数都不相同,因此在许多申请中,最大的num_orden为50,在其他情况下则为150。
我必须向df_ordenaleatorio添加一些申请人,但要随机分配其num_orden。数据帧df_new如下:
id qwe nivel
0 30004612 12683 1101200
1 30007619 127 1101100
2 30018027 24318 1101300
3 30116284 2330 1101200
4 30116078 127 1101300
5 30007603 127 1101100
因此,除了num_orden之外,它几乎具有将其连接到原始数据帧的所有功能。 Num_orden必须在1和向该对{qwe,nivel}应用那一刻的学生数量之间随机分配。请注意,这将导致,当我们将该应用程序添加到原始DF时,将出现重复的num_orden(num_orden必须是唯一的),因此重复的数字(但是原始数字,而不是我们刚刚添加的数字)以及所有在它下面,必须下降一个位置,即在其num_orden上增加一个。
例如,使用{qwe,nivel} = {127,1101100}对,在df_new中有两个申请人。当我们添加第一个时:
id qwe nivel
30007619 127 1101100
Num_orden必须在1和该{qwe,nivel}的原始申请者数量之间随机分配,假设为100。因此,使用numpy时,应该随机分配np.random.randint(100)。让我们假设Numpy给了我们20作为num_orden。因此,必须将以下行添加到df_ordenaleatorio。
id qwe nivel num_orden
30007619 127 1101100 20
请注意,df_ordenaleatorio中已经有同一对{qwe,nivel}的应用程序。此应用程序(原始应用程序的编号为num_orden 20)及其下面的所有应用程序都必须下降一个位置,因此我们必须将所有应用程序的num_order加1。
现在,我们必须为{qwe,nivel} = {127,1101100}对添加第二个应用程序
id qwe nivel
30007603 127 1101100
该过程必须与之前的过程相同,只是现在必须在1到101之间随机分配num_order(请记住,我们已经在该对{qwe,nivel}中添加了一个应用程序。此外,我们将拥有重复值存在相同的问题,因此我们必须在重复的值及其下面的所有学生的num_orden中加1。
我真的不知道该怎么做。我可以使用任何熊猫命令,还是必须创建自己的函数?
非常感谢!