如何在Python中快速计算数据框列中每个值的概率?

时间:2017-05-31 07:07:56

标签: python-3.x pandas probability distribution

我想根据自己的分布计算列数据帧中所有数据的概率。例如,我的数据如下:

    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 ...)并得到了上述例子。我的代码如下:

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)

但我无法忍受的是,如果我的专栏太长,会导致操作变慢。是否有更好的方法在熊猫中进行操作?提前感谢。

1 个答案:

答案 0 :(得分: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