随机选择具有给定概率的项目

时间:2018-05-10 20:08:29

标签: python excel python-3.x

目前我正在开发一个项目,我需要用Python编写代码,但偶然发现了一些障碍。我有一份包含692件物品(库存单位)的excel表及其相应的销售数字。这些物品按顺序从大多数销售到最少销售。我计算了每个项目的概率和累积概率,如下图1和图2所示:

excel sheet

excel sheet 2

基于累积概率和以下公式:= INDEX(A $ 2:A $ 721; COUNTIF(H $ 2:H $ 721;“< =”& RAND())+ 1)

从692个项目中随机选择20个项目以生成订单拣配清单,如下图所示:

generated pick list

基本上我想在Python中做同样的事情。因此,基于它们的概率从大列表中选择多个项目。

我找到了以下代码,但不确定如何使用它:

    import random
def random_pick(some_list, probabilities):
    x = random.uniform(0, 1)
    cumulative_probability = 0.0
    for item, item_probability in zip(some_list, probabilities):
        cumulative_probability += item_probability
        if x < cumulative_probability: break
    return item

如果有人能就如何实现这一目标给我一些指示,那就太好了。提前谢谢!

1 个答案:

答案 0 :(得分:2)

使用random.choices并给它一些概率:

<Target Name="NLogTransform" AfterTargets="PipelineCopyAllFilesToOneFolderForMsdeploy">
<Message Text="NLog file transform according to NLog.WebDeploy - TEST.config" Importance="high" />
<TransformXml Source="NLog.config"
              Transform="NLog.WebDeploy - TEST.config"
              Destination="$(_PackageTempDir)\NLog.config" />
</Target>

输出:

from collections import Counter
from random import choices


data = [1,2,3,4]
prob = [1,1,8,1] # 3 about 8 times more likely to being choosen then 1,2 or 4

c = Counter(choices(data,prob,k=1000)) # generate 1000 and count

print(c)