2017-05-31 100 views
0

我想根据自己的分布计算列数据框中所有数据的概率。例如,我的数据是这样的:如何在Python中快速计算数据帧列中每个值的概率

data 
0  1 
1  1 
2  2 
3  3 
4  2 
5  2 
6  7 
7  8 
8  3 
9  4 
10  1 

和输出我希望是这样的:

data  pro 
0  1 0.155015 
1  1 0.155015 
2  2 0.181213 
3  3 0.157379 
4  2 0.181213 
5  2 0.181213 
6  7 0.048717 
7  8 0.044892 
8  3 0.157379 
9  4 0.106164 
10  1 0.155015 

我还指another question(How to compute the probability ...)并获得above.My代码示例如下:

import scipy.stats 
samples = [1,1,2,3,2,2,7,8,3,4,1] 
samples = pd.DataFrame(samples,columns=['data']) 
print(samples) 
kde = scipy.stats.gaussian_kde(samples['data'].tolist()) 
samples['pro'] = kde.pdf(samples['data'].tolist()) 
print(samples) 

但是,我不能忍受的是,如果我的专栏太长,它会使操作变慢。有没有更好的方法来做到这一点在熊猫呢?在此先感谢。

回答

4

它自己的分布并不意味着kde。您可以使用value_countsnormalize=True

df.assign(pro=df.data.map(df.data.value_counts(normalize=True))) 

    data  pro 
0  1 0.272727 
1  1 0.272727 
2  2 0.272727 
3  3 0.181818 
4  2 0.272727 
5  2 0.272727 
6  7 0.090909 
7  8 0.090909 
8  3 0.181818 
9  4 0.090909 
10  1 0.272727 
+0

首先,感谢您的回答。其次,我想问一下能否从概率密度函数中获得概率。如果我的电话号码不属于上述数值,我怎样才能得到这个概率。例如,如何根据该列的分布得出值为1.5的概率? –