随机分组

2024-06-16 10:05:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个下面的数据帧:

我试图填充的值,在支付damount系列作为任何随机值之间的10%至20%的制裁damount。这个逻辑需要应用于accountid的每个组。你知道吗

Index  accountid  transdate  SanctionedAmount  balance  disbursedamount

0        103602 2018-08-01              7806     6798                0
1        103602 2018-11-01              7806     6798                0
2        103606 2018-11-01              6274     7313                0
3        103606 2018-06-01              6274     7313                0
4        103606 2018-07-01              6274     7313                0
5        103606 2018-08-01              6274     7313                0
6        103609 2018-11-01              5726     8189                0
7        103609 2018-07-01              5726     8189                0
8        103609 2018-08-01              5726     8189                0
9        103609 2018-06-01              5726     8189                0
10       103617 2018-07-01              6549     7457                0
11       103634 2018-06-01              8835     7794                0
12       103637 2018-07-01              6920     6623                0
13       103644 2018-06-01              8481     8253                0
14       103645 2018-11-01              8220     9966                0
15       103645 2018-06-01              8220     9966                0
16       103645 2018-07-01              8220     9966                0
17       103645 2018-08-01              8220     9966                0

预期产量:

Index accountid transdate  SanctionedAmount  balance disbursedamount

0   103602     2018-08-01     1000            798      100
1   103602     2018-11-01     1000            798      200
2   103606     2018-11-01     2000            313      200
3   103606     2018-06-01     2000            313      400
4   103606     2018-07-01     2000            313      200
5   103606     2018-08-01     2000            313      300
6   103609     2018-11-01     5000            189      500
7   103609     2018-07-01     5000            189      1000
8   103609     2018-08-01     5000            189      700
9   103609     2018-06-01     5000            189      800
10  103617     2018-07-01     3000            457      600
11  103634     2018-06-01     4000            794      700

Tags: 数据index逻辑产量balance制裁transdateaccountid
3条回答

您只需将SanctionedAmount乘以从0.1和0.2之间的均匀分布中随机选择的数字。你知道吗

df['disbursedamount'] = df['SanctionedAmount'] * np.random.uniform(0.10, 0.20)

可以将df.apply()np.random.randint()一起使用:

df['disbursedamount'] = df.apply(lambda x: np.random.randint(0.1*x['SanctionedAmount'], 0.2*x['SanctionedAmount']), axis=1)

使用np.random.seed(0),可以得到:

       accountid   transdate  SanctionedAmount  balance  disbursedamount
Index                                                                   
0         103602  2018-08-01              7806     6798             1464
1         103602  2018-11-01              7806     6798             1339
2         103606  2018-11-01              6274     7313              819
3         103606  2018-06-01              6274     7313              986
4         103606  2018-07-01              6274     7313              636
5         103606  2018-08-01              6274     7313              904
6         103609  2018-11-01              5726     8189              642
7         103609  2018-07-01              5726     8189             1044
8         103609  2018-08-01              5726     8189              968
9         103609  2018-06-01              5726     8189              886
10        103617  2018-07-01              6549     7457             1140
11        103634  2018-06-01              8835     7794             1434
12        103637  2018-07-01              6920     6623              779
13        103644  2018-06-01              8481     8253             1022
14        103645  2018-11-01              8220     9966             1422
15        103645  2018-06-01              8220     9966             1499
16        103645  2018-07-01              8220     9966             1359
17        103645  2018-08-01              8220     9966              894

你想用随机函数吗 这里有一个简单的选择

   from random import random
   df.disbursedamount = df.SanctionedAmount * (random()/5)

相关问题 更多 >