从python的csv文件中的概率生成数字

问题描述:

我有一个具有不同情况的Excel文件和每个案例约75个事件。在每种情况下都有可能发生每个事件。因此,Excel文件看起来是这样的:从python的csv文件中的概率生成数字

 event1 event2 ... event75  

case1 0.0343 0.0234 ... 0.1194 

case2 0.0924 0.0532 ... 0.0023 

我想生成Python中的随机数,范围从0到75与特定情况下的概率。当我曾与病例只有2事件可能发生,我用这样的代码:

excel_cases = pd.read_csv('/.../cases.csv') 

def event_probabilities(case): 
event_probability = excel_cases.loc[excel_cases['Case'] == case, 'event1'].values[0] 
return event_probability 

event1_probability = event_probabilities("case1") 
np.random.choice(np.arange(1, 3), p=[event1_probability, (1 - event1_probability)]) 
# can also do an event2_probability instead of 1-event1_probability 

然而,当事件的范围变得越来越大,我不知道会是什么这样做的更有效的方法。谢谢您的帮助。

*不一样的另一个问题,因为我从Excel

+1

您有75个事件,但76个返回值(0-75);什么是额外的? – Prune

+0

我认为当范围(0,75)不包括75,所以它是75值,0到74 – memokerobi

得到的概率所以看起来你要4位小数的精度吗?所以你可以做的是得到一个随机数字0和9999之间:

from random import randint 
randomNum = randint(0,9999)) 

然后由10000乘以每个概率,并设置了一堆每个开关的elif语句。因此,如果event_1的概率为0.0045,而事件2的概率为.0100,那么elif看起来就像这样。

if randomNum < 45: 
    event_1() 
elif randomNum > 45 && randomNum < 145: 
    event_2() 
.......... 

等等。这不应该要求随机接近多少个呼叫。虽然设置它可能不是微不足道的。

+0

这样做需要很长时间,这不是很实用,就像我使用的方法。我正在寻找一个更简单的方法,不知道是否有一个。 – memokerobi

+0

如果以编程方式生成代码,则不会花太长时间,但这是完全不同的任务。 –