我有一个下面的DataFrame:
我正在尝试填充支出系列中的值,作为SanctionedAmount的10%到20%之间的任何随机值。此逻辑需要应用于每组帐户ID。
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
答案 0 :(得分:2)
您可以将SanctionedAmount
乘以从0.1到0.2之间的均匀分布的随机选择的数字。
df['disbursedamount'] = df['SanctionedAmount'] * np.random.uniform(0.10, 0.20)
答案 1 :(得分:0)
for i in locaccntrandom.index:
locaccntrandom.loc[i,'disbursedamount']=((random.randint(10,15)* locaccntrandom.loc[i,'SanctionedAmount'])/100)
我为此使用了循环,并能够获取值。
谢谢!
答案 2 :(得分:0)
您可以将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
答案 3 :(得分:0)
您要使用随机函数 这是一个简单的选项
from random import random
df.disbursedamount = df.SanctionedAmount * (random()/5)
答案 4 :(得分:0)
从您的预期输出中,您似乎不需要逻辑“应用于每个帐户id组”,即不需要groupby
之类的功能。所以每一行的解决方案是
import pandas as pd
import numpy as np
# df = the_DataFrame_you_have
df['disbursedamount'] = df['SanctionedAmount'] * np.random.uniform(0.1, 0.2)