输入均值和标准差以在DataFrame Pandas Python中应用概率分布

时间:2016-01-09 01:27:12

标签: python numpy pandas scipy dataframe

我将来会有一系列日期。我想使用关于标准差的假设和尚未安排的事件的平均值来“预测”该事件在任何特定日期的未来概率。假设我有一个min/max日期1/8/162/3/16的Pandas DF。我目前只在所有日子里运行相同的概率(.037 ...)。

我在一个看起来像这样的数据框中(我手动填写了所需的Standard_dev_assisted_probability):

Poss_Date   Equal_probability  Standard_dev_assisted_probability

1/8/2016    0.037037            min date in poss date range
1/9/2016    0.037037
1/10/2016   0.037037
1/11/2016   0.037037            -1st dv / two thirds border
1/12/2016   0.037037
1/13/2016   0.037037
1/14/2016   0.037037
1/15/2016   0.037037
1/16/2016   0.037037
1/17/2016   0.037037
...         ...
1/22/2016   0.037037            mean / peak of distribution
...         ...
2/1/2016    .03707              +~1std dev
2/3/2016    0.037037            max date in poss range

如果我们假设未来分布的'均值'是1/22/16,那么标准开发是11天......

有没有办法将它们插入Pandas DF并让它以概率吐出一列?显然,66%的概率应该在+/- 11周围1/22天分配,正态分布/等。

我正在使用伪代码进行成像,它将类似于:

df['Probability']=df.applystandarddev(column=dates,mean=1/22,stddv=11)

如果我们不需要“帐户”缩短过去的时间段,那就太棒了。显然平均时间比之后多,但我认为这是图书馆处理的统计游戏的一部分,等等。

1 个答案:

答案 0 :(得分:2)

通过在当天结束时和当天开始时获取给定概率的CDF,我们能够找到事件将在当天发生的概率。

以下是正态分布的示例。

from scipy.stats.distributions import norm

def prob_distribution(day, mean_day, std):
    start_z = float((day - mean_day).days) / std
    end_z = float((day - mean_day).days + 1) / std
    return norm.cdf(end_z) - norm.cdf(start_z)

df['Prob'] = df['Poss_Date'].apply(lambda day: prob_distribution(day, datetime(2016,2,1), 10))