将特定时期的概率数据框转换为 n 个时期至少一次的概率?
Transforming a dataframe of probabilities for specific periods to be probabilities of at least once over n periods?
我有一个数据框,它具有大量连续时间段内不同事件的概率,我想转换此 df 以显示某事在 n 个时间段内至少发生一次的概率。例如,我有这个,它是 n = 1:
event | period | probability
A | period 1 | 0.6
A | period 2 | 0.7
A | period 3 | 0.8
A | period 4 | 0.85
A | period 5 | 0.9
我想计算出 A 在两个时期 (n = 2) 中至少出现一次的概率,即:
A | period 1 | 1-(1-0.6)*(1-0.7)
A | period 2 | 1-(1-0.7)*(1-0.8)
A | period 3 | 1-(1-0.8)*(1-0.85)
A | period 4 | 1-(1-0.85)*(1-0.9)
而 n = 3 将是:
A | period 1 | 1-(1-0.6)*(1-0.7)*(1-0.8)
A | period 2 | 1-(1-0.7)*(1-0.8)*(1-0.85)
A | period 3 | 1-(1-0.8)*(1-0.85)*(1-0.9)
有一些 python / pandas 函数或术语可以在这里工作吗?
您可以将 groupby 与转换一起使用:
n = 2
df['new_probability'] = df.groupby('event')['probability'].transform(lambda x: x.rolling(n).agg(lambda y: 1-np.prod(1-y)).shift(-n+1))
print(df)
event period probability new_probability
A period1 0.60 0.880
A period2 0.70 0.940
A period3 0.80 0.970
A period4 0.85 0.985
A period5 0.90 NaN
对于n=3
:
n = 3
df['new_probability'] = df.groupby('event')['probability'].transform(lambda x: x.rolling(n).agg(lambda y: 1-np.prod(1-y)).shift(-n+1))
print(df)
event period probability new_probability
A period1 0.60 0.976
A period2 0.70 0.991
A period3 0.80 0.997
A period4 0.85 NaN
A period5 0.90 NaN
我有一个数据框,它具有大量连续时间段内不同事件的概率,我想转换此 df 以显示某事在 n 个时间段内至少发生一次的概率。例如,我有这个,它是 n = 1:
event | period | probability
A | period 1 | 0.6
A | period 2 | 0.7
A | period 3 | 0.8
A | period 4 | 0.85
A | period 5 | 0.9
我想计算出 A 在两个时期 (n = 2) 中至少出现一次的概率,即:
A | period 1 | 1-(1-0.6)*(1-0.7)
A | period 2 | 1-(1-0.7)*(1-0.8)
A | period 3 | 1-(1-0.8)*(1-0.85)
A | period 4 | 1-(1-0.85)*(1-0.9)
而 n = 3 将是:
A | period 1 | 1-(1-0.6)*(1-0.7)*(1-0.8)
A | period 2 | 1-(1-0.7)*(1-0.8)*(1-0.85)
A | period 3 | 1-(1-0.8)*(1-0.85)*(1-0.9)
有一些 python / pandas 函数或术语可以在这里工作吗?
您可以将 groupby 与转换一起使用:
n = 2
df['new_probability'] = df.groupby('event')['probability'].transform(lambda x: x.rolling(n).agg(lambda y: 1-np.prod(1-y)).shift(-n+1))
print(df)
event period probability new_probability
A period1 0.60 0.880
A period2 0.70 0.940
A period3 0.80 0.970
A period4 0.85 0.985
A period5 0.90 NaN
对于n=3
:
n = 3
df['new_probability'] = df.groupby('event')['probability'].transform(lambda x: x.rolling(n).agg(lambda y: 1-np.prod(1-y)).shift(-n+1))
print(df)
event period probability new_probability
A period1 0.60 0.976
A period2 0.70 0.991
A period3 0.80 0.997
A period4 0.85 NaN
A period5 0.90 NaN