Создайте столбец со случайным процентом, равным сумме - PullRequest
2 голосов
/ 10 февраля 2020

Я хотел бы создать случайный процентный столбец, в котором он должен иметь сумму до 1

Текущая таблица:

Col1    Value
A        100
B        100

Требуется Пример 1: если есть две строки, то случайный значение может быть любым числом, но сумма должна быть 1

Col1    Value  Random  New Value
A        100    0.7    70
B        100    0.3    30
                 1 

Требуется Пример 2: выборка из трех строк

Col1    Value  Random  New Value
A        100    0.2     20
B        100    0.1     10
C        100    0.7     70
                 1

Ответы [ 2 ]

2 голосов
/ 10 февраля 2020

Вы можете использовать np.random.dirichlet и np.around:

import pandas as pd
import numpy as np
df = pd.DataFrame({'Col1': list("ABC"), 'Value': [100]*3})
df['random'] = np.around(np.random.dirichlet
                        (np.ones(df.shape[0]),size=1)[0],
                         decimals = 1)
df['New value'] = (df['Value']*df['random']).astype(int)
print(df)

Выход:

  Col1  Value  random  New value
0    A    100     0.4         40
1    B    100     0.3         30
2    C    100     0.3         30
1 голос
/ 10 февраля 2020

Вы можете использовать функцию numpy random.randint:

df = pd.DataFrame({'Value': [100, 100, 100]})

nums = np.random.randint(10, size=len(df))
df['Random'] = nums / nums.sum()
df['New'] = df['Value'] * df['Random']

df.loc['Sum', :] = df.sum()

Выход:

     Value  Random     New
0    100.0  0.1250   12.50
1    100.0  0.3125   31.25
2    100.0  0.5625   56.25
Sum  300.0  1.0000  100.00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...