python - 生成一个总和为 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
解决方案
您可以使用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
推荐阅读
- xquery - MarkLogic 查询控制台中的属性选项卡是什么
- xcode - Xcode 12:函数“SecKeyEncrypt”的隐式声明在 C99 中无效
- assembly - 在不同的内核上运行时无法使用带有函数名称的调用指令
- imperative-languages - 命令式语言示例
- attributes - 使用 Motorola MC3100 扫描期间出现 Datawedge 错误
- c - C中的文件读取从文件中间开始
- mysql - 在 MySQL 中生成大量数字
- graph - 在 AMPL 中索引元组集的便捷方法
- ruby-on-rails - 在 Rails 项目中从 Yarn 迁移到 Npm 会因缺少依赖项错误而破坏 Webpacker
- i2c - 如何使用 i2cset 写入 16 位 I2C 地址