2017-05-31 99 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的概率? –