首页 > 解决方案 > 生成一个总和为 1 的随机百分比列

问题描述

我想创建一个随机百分比列,它的总和应为 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

标签: pythonpython-3.xpandasnumpy

解决方案


您可以使用np.random.dirichletnp.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

推荐阅读