猿问

有没有用于累积概率的python函数

我有一个看起来像这样的数据帧:


Id   Day1   Day2   Day3 

1    0.35   0.32   0.29  

2    0.63   0.59   0.58

3    0.12   0.10   0.07

此表显示每条记录每天发生某个事件的概率。


我正在搜索的是一个python函数,它将为我提供事件发生在任何一天的累积概率。输出将如下所示:


Id   Day1   Day2   Day3  Cum_Prob

1    0.35   0.32   0.29  0.686

2    0.63   0.59   0.58  0.983

3    0.12   0.10   0.07  0.263

上述示例表中的值是正确的,即它们是每个值在3天内任何一天发生的事件的实际概率。Cum_ProbId


我可以自己写这个函数几天。实际上,我正在处理超过3天的时间,我相信手写这个函数很多天将是非常乏味的。


是否有预先存在的函数可以从单个概率的输入中计算概率?或者有没有一种快速的方法可以在x天数内为此编写udf?


慕仙森
浏览 219回答 2
2回答

拉丁的传说

用:df['Cum_Prob'] = df.iloc[:, 1:].sum(axis=1)或df['Cum_Prob'] = df[df.columns[df.columns.str.contains('Day')]].sum(axis=1)编辑df_days = df[df.columns[df.columns.str.contains('Day')]]cumprob=0for i, col in df_days.items():    cumprob = col.mul(1-cumprob) + cumprobdf['Cum_Prob']=cum_Prob输出   Id  Day1  Day2  Day3  Cum_Prob0   1  0.35  0.32  0.29  0.6861801   2  0.63  0.59  0.58  0.9362862   3  0.12  0.10  0.07  0.263440具有减少的替代方案from functools import reducedf['Cum_Prob']=reduce(lambda cum_prob, new_prob: (1-cum_prob)*new_prob + cum_prob ,                      df_days.values.T)减少可能是最快的%%timeitfrom functools import reducedf['Cum_Prob']=reduce(lambda cum_prob, new_prob: (1-cum_prob)*new_prob + cum_prob ,                      df_days.values.T)111 µs ± 2.29 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)%%timeitcumprob=0for i, col in df_days.items():    cumprob = col.mul(1-cumprob) + cumprobdf['Cum_Prob']=cumprob1.44 ms ± 5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

MM们

只要算一下,这只是1 - (1-df).prod(1)# if your `Id` is not index:# 1 - df.filter(like='days)# 1 - df.set_index('Id')输出:Id1    0.6861802    0.9362863    0.263440dtype: float64
随时随地看视频慕课网APP

相关分类

Go
我要回答