【问题标题】:How do I calculate the probability of every value in a dataframe column quickly in Python?如何在 Python 中快速计算数据框列中每个值的概率?
【发布时间】:2017-10-31 20:31:57
【问题描述】:

我想计算一个column dataframe中所有数据根据其自身分布的概率。例如,我的数据是这样的:

    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)

但我不能忍受的是,如果我的专栏太长,会导致操作变慢。在pandas中是否有更好的方法?提前谢谢。

【问题讨论】:

    标签: python-3.x pandas probability distribution


    【解决方案1】:

    它自己的分布并不意味着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
    

    【讨论】:

    • 首先感谢您的回答。其次,我想问一下我是否可以从概率密度函数中得到概率。如果我的号码不属于上述值,我怎么能得到概率。例如,如何根据该列的分布得到一个值为 1.5 的概率?
    猜你喜欢
    • 2016-10-15
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 2018-11-29
    相关资源
    最近更新 更多