当平均值和标准值依赖于另一列值时,对特定列的所有值应用高斯分布

2024-10-16 20:47:26 发布

您现在位置:Python中文网/ 问答频道 /正文

有什么方法可以创建一个新列,其中包含每个列值的高斯分布/正态分布,而每个列值对应另一个不同的列值?在

我的意思是,如果我有两个具有以下结构的数据帧:

>> Original Dataframe 1

      Samp     Age     Cs
1       A      51      msi
2       B      62      cin
3       C      55      msi
4       D      70      ebv
5       E      56      gs
....



>> Original DataFrame 2

   Samp   Cs  Age 
0     A  cin   51 
1     A  ebv   51
2     A   gs   51
3     A  msi   51
4     B  cin   62
5     B  ebv   62
6     B   gs   62
7     B  msi   62
8     C  cin   55
9     C  ebv   55
10    C   gs   55
11    C  msi   55
12    D  cin   70
13    D  ebv   70
14    D   gs   70
15    D  msi   70
16    E  cin   56
17    E  ebv   56
18    E   gs   56
19    E  msi   56
...

如您所见,原始数据帧2是原始数据帧1中CS列的唯一值的n行重复。在

为了实现我的目标,我需要从原始数据帧1到所有唯一的Cs值中检索平均值和标准差,因此,我可以进一步将它应用于ageage列中的原始数据帧2,以获得一个新的df-所需的数据帧,其中包含一个新的列概率。在

由于本例中原始数据帧1的平均值和标准差为:

^{pr2}$

有没有办法输出以下数据帧?在

^{3}$

到目前为止,我一直在努力做到:

def get_age_cs_probs(df):
    df['Probability'] = df.groupby('Cs').Age.apply(lambda x: 
                                                         (1/(np.sqrt(2*3.14*(x.std()**2))))*(np.exp(-(((x-x.mean())**2)/(2*(x.std()**2))))))
    return df

Tags: 数据gsdfage原始数据npcs平均值
1条回答
网友
1楼 · 发布于 2024-10-16 20:47:26

scipy.stats.zmap将根据不同的数组给您数组的z分数。在

这个结果可以输入scipy.stats.norm.cdf(),它将把你的z分数转换成概率。在

查看这两个函数,看看是否要指定不同的df或其他值而不是default。在

我有一个答案,它为每个'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值),则可以。在

相关问题 更多 >