1
votes

existe-t-il un moyen plus efficace d'agréger un ensemble de données et de calculer la fréquence en Python ou R?

J'ai un ensemble de données [0, 1, 1, 2], je veux l'agréger. pour ce faire, je dois calculer et mettre manuellement la 'fréquence': 1/4 dans un DataFrame. voici le code.

>>> df = pd.DataFrame({'value':[0, 1, 1, 2],
...             'frequency':1/4})
>>> df.groupby('value').sum()
       frequency
value           
0           0.25
1           0.50
2           0.25

existe-t-il un moyen plus efficace d'agréger l'ensemble de données et de calculer la fréquence automatiquement en Python ou R?


1 commentaires

En R vous pouvez faire: dat <- data.frame (value = c (0, 1, 1, 2)); table (dat $ valeur) / nrow (dat)


4 Réponses :


2
votes
df['value'].value_counts(normalize=True,sort=False)
Maybe you could try this...Reference:-
pandas.Series.value_counts()

0 commentaires

0
votes

sans utiliser de pandas, vous pouvez utiliser Counter

x = Counter(z)
df = pd.DataFrame.from_dict(x, orient='index').reset_index()

puis vers un dataframe

from collections import Counter
z = [0,1,1,2]
Counter(z)
Counter({1: 2, 0: 1, 2: 1})

puis prendre les valeurs divisées par 4 ( votre fréquence désirée)


0 commentaires

1
votes

Dans R , vous pouvez faire quelque chose comme

library(data.table)
dt <- data.table(sample(0:2,100,replace=TRUE))
dt[,.N/nrow(dt),V1]

## > dt[,.N/nrow(dt),V1]

##    V1   V1
## 1:  1 0.33
## 2:  2 0.32
## 3:  0 0.35


0 commentaires

2
votes

Dans R

import numpy as np 
u,c=np.unique(df.value,return_counts=True)
pd.Series(c/c.sum(),index=u)
0    0.25
1    0.50
2    0.25
dtype: float64

En python, NumPy

prop.table(table(dat$value))

   0    1    2 
0.25 0.50 0.25 


0 commentaires