Случайно в каждой строке в группе - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть ниже DataFrame:

Я пытаюсь заполнить значения в серии выплаченных сумм как любое случайное значение между 10% и 20% от SanctionedAmount.Эту логику необходимо применять к каждой группе учета.

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

Ответы [ 5 ]

0 голосов
/ 12 декабря 2018

Исходя из ожидаемого результата, кажется, что вам не требуется логика «применяться к каждой группе учета», т. Е. Не нужны такие функции, как 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)
0 голосов
/ 12 декабря 2018

Вы можете просто умножить SanctionedAmount на произвольно выбранное число из равномерного распределения между 0,1 и 0,2.

df['disbursedamount'] = df['SanctionedAmount'] * np.random.uniform(0.10, 0.20)
0 голосов
/ 12 декабря 2018

Вы можете использовать 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
0 голосов
/ 12 декабря 2018

вы хотите использовать случайную функцию, вот простая опция

   from random import random
   df.disbursedamount = df.SanctionedAmount * (random()/5)
0 голосов
/ 12 декабря 2018
for i in locaccntrandom.index:
    locaccntrandom.loc[i,'disbursedamount']=((random.randint(10,15)* locaccntrandom.loc[i,'SanctionedAmount'])/100)

Я использовал для цикла для этого и смог получить значения.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...