将观察结果插入数据框保留顺序

时间:2018-07-08 16:22:45

标签: python pandas numpy random

在将某些值添加到排序列表时遇到了一些麻烦。 我有两个数据框,如下所示: 第一个是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。

我真的不知道该怎么做。我可以使用任何熊猫命令,还是必须创建自己的函数?

非常感谢!

0 个答案:

没有答案