为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕仙森 2022-08-25 09:25:10
我有一个看起来像这样的数据帧:Id   Day1   Day2   Day3 1    0.35   0.32   0.29  2    0.63   0.59   0.583    0.12   0.10   0.07此表显示每条记录每天发生某个事件的概率。我正在搜索的是一个python函数,它将为我提供事件发生在任何一天的累积概率。输出将如下所示:Id   Day1   Day2   Day3  Cum_Prob1    0.35   0.32   0.29  0.6862    0.63   0.59   0.58  0.9833    0.12   0.10   0.07  0.263上述示例表中的值是正确的,即它们是每个值在3天内任何一天发生的事件的实际概率。Cum_ProbId我可以自己写这个函数几天。实际上,我正在处理超过3天的时间,我相信手写这个函数很多天将是非常乏味的。是否有预先存在的函数可以从单个概率的输入中计算概率?或者有没有一种快速的方法可以在x天数内为此编写udf?
查看完整描述

2 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

用:


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=0

for i, col in df_days.items():

    cumprob = col.mul(1-cumprob) + cumprob

df['Cum_Prob']=cum_Prob

输出


   Id  Day1  Day2  Day3  Cum_Prob

0   1  0.35  0.32  0.29  0.686180

1   2  0.63  0.59  0.58  0.936286

2   3  0.12  0.10  0.07  0.263440

具有减少的替代方案


from functools import reduce

df['Cum_Prob']=reduce(lambda cum_prob, new_prob: (1-cum_prob)*new_prob + cum_prob ,

                      df_days.values.T)

减少可能是最快的


%%timeit

from functools import reduce

df['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)

%%timeit

cumprob=0

for i, col in df_days.items():

    cumprob = col.mul(1-cumprob) + cumprob

df['Cum_Prob']=cumprob

1.44 ms ± 5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)


查看完整回答
反对 回复 2022-08-25
?
MM们

TA贡献1886条经验 获得超2个赞

只要算一下,这只是


1 - (1-df).prod(1)

# if your `Id` is not index:

# 1 - df.filter(like='days)

# 1 - df.set_index('Id')

输出:


Id

1    0.686180

2    0.936286

3    0.263440

dtype: float64


查看完整回答
反对 回复 2022-08-25
  • 2 回答
  • 0 关注
  • 218 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信