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?
4 Réponses :
df['value'].value_counts(normalize=True,sort=False) Maybe you could try this...Reference:- pandas.Series.value_counts()
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)
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
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
En R vous pouvez faire:
dat <- data.frame (value = c (0, 1, 1, 2)); table (dat $ valeur) / nrow (dat)