2017-05-31 3 views
0

Je veux calculer la probabilité de toutes les données dans une colonne dataframe selon sa propre distribution.Par exemple, mes données comme ceci:Comment puis-je calculer la probabilité de chaque valeur dans une colonne de données rapidement en Python?

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

et la sortie je me attends comme ceci:

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 

Je me réfère également à another question(How to compute the probability ...) et obtenir un exemple du code above.My est la suivante:

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) 

Mais ce que je ne peux pas supporter est que si ma colonne est trop longue, elle rend l'opération lente.Est-il un meilleur moyen de le faire dans les pandas? Merci d'avance.

Répondre

4

Sa propre distribution ne signifie pas kde. Vous pouvez utiliser value_counts avec normalize=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

Tout d'abord, je vous remercie de votre réponse. Deuxièmement, je voudrais demander si je peux obtenir la probabilité de la fonction de densité de probabilité. Si mon numéro n'appartient pas à la valeur ci-dessus, comment puis-je obtenir la probabilité. Par exemple, comment puis-je obtenir la probabilité d'une valeur de 1,5 selon la distribution de cette colonne? –