scipy.stats.zmap
даст вам z-оценки для вашего массива на основе другого массива.
этот результат может быть передан в scipy.stats.norm.cdf()
, который преобразует ваши z-оценки в вероятности.
Просмотрите обе функции, чтобы узнать, хотите ли вы указать другое значение df или другое значение, отличное от значения по умолчанию.
У меня есть ответ, который генерирует список списков вероятностей для каждого значения 'Cs', но не могу понять, как правильно вернуть его в df2.
df1
Out[117]:
Samp Age Cs
1 A 51 msi
2 B 62 cin
3 C 55 msi
4 D 70 ebv
5 E 56 gs
df2
Out[118]:
Samp Cs Age Probability
0 A cin 51 0.01160
1 A ebv 51 0.01968
2 A gs 51 0.02809
3 A msi 51 0.00353
4 B cin 62 0.03485
5 B ebv 62 0.03542
6 B gs 62 0.03777
7 B msi 62 0.00455
8 C cin 55 0.01980
9 C ebv 55 0.02725
10 C gs 55 0.03579
11 C msi 55 0.00900
12 D cin 70 0.03735
13 D ebv 70 0.02963
14 D gs 70 0.02256
15 D msi 70 0.04570
16 E cin 56 0.02210
17 E ebv 56 0.02897
18 E gs 56 0.03712
19 E msi 56 0.01100
[st.norm.cdf(st.zmap(df2[df2.loc[:, 'Cs'] == x].Age, df1[df1.loc[:, 'Cs']==x].Age)) for x in df2.Cs.unique()]
Out[119]:
[array([ 0., nan, 0., 1., 0.]),
array([ 0., 0., 0., nan, 0.]),
array([ 0., 1., 0., 1., nan]),
array([0.15865525, 0.9999966 , 0.84134475, 1. , 0.9331928 ])]
Это не совсем соответствует вашему ожидаемому выводу, но было бы, если бы у вашего df1 были свойства, которые вы перечислили в вопросе (то есть, те же самые значения m и sd).