J'ai entendu dans Pandas il y a souvent plusieurs façons de faire la même chose, mais je me demandais -
Si j'essaie de regrouper les données par une valeur dans une colonne spécifique et de compter le nombre d'éléments avec cette valeur, quand est-il sensé d'utiliser df.groupby('colA').count()
et quand est-il sensé d'utiliser df['colA'].value_counts()
?
Il y a une différence value_counts
return:
L'objet résultant sera dans l'ordre décroissant de sorte que le premier élément est l'élément le plus fréquent.
mais count
non, il trie la sortie par index
(créé par colonne dans groupby('col')
).
df.groupby('colA').count()
est pour agréger toutes les colonnes de df
par fonction count.
Donc il compte les valeurs excluant NaN
s.
Donc, si besoin count
une seule colonne a besoin:
df.groupby('colA')['colA'].count()
Échantillon:
df = pd.DataFrame({'colB':list('abcdefg'),
'colC':[1,3,5,7,np.nan,np.nan,4],
'colD':[np.nan,3,6,9,2,4,np.nan],
'colA':['c','c','b','a',np.nan,'b','b']})
print (df)
colA colB colC colD
0 c a 1.0 NaN
1 c b 3.0 3.0
2 b c 5.0 6.0
3 a d 7.0 9.0
4 NaN e NaN 2.0
5 b f NaN 4.0
6 b g 4.0 NaN
print (df['colA'].value_counts())
b 3
c 2
a 1
Name: colA, dtype: int64
print (df.groupby('colA').count())
colB colC colD
colA
a 1 1 1
b 3 2 2
c 2 2 1
print (df.groupby('colA')['colA'].count())
colA
a 1
b 3
c 2
Name: colA, dtype: int64
Groupby
et value_counts
sont des fonctions totalement différentes. Vous ne pouvez pas effectuer de value_counts sur une trame de données.
Value Counts
Sont limités uniquement pour une seule colonne ou série et son seul but est de renvoyer la série de fréquences de valeurs
Groupby
renvoie un objet afin que l'on puisse effectuer des calculs statistiques sur lui. Donc quand vous faites df.groupby(col).count()
il retournera le nombre de vraies valeurs présentes dans les colonnes par rapport au specific columns
Dans groupby.
Quand faut-il utiliser value_counts
Et quand faut-il utiliser groupby.count
: Prenons un exemple
df = pd.DataFrame({'id': [1, 2, 3, 4, 2, 2, 4], 'color': ["r","r","b","b","g","g","r"], 'size': [1,2,1,2,1,3,4]})
Nombre de groupes:
df.groupby('color').count()
id size
color
b 2 2
g 2 2
r 3 3
Le nombre de groupes est généralement utilisé pour obtenir le nombre valide de valeurs présentes dans toutes les colonnes
with reference to
Ouwith respect to
Une ou plusieurs colonnes spécifiées. Donc pas un nombre (nan) ne sera exclu.
Pour trouver la fréquence à l'aide de groupby, vous devez agréger la colonne spécifiée elle-même comme @jez l'a fait. (peut-être pour éviter cela et faciliter la vie des développeurs value_counts est implémenté).
valeur compte:
df['color'].value_counts()
r 3
g 2
b 2
Name: color, dtype: int64
Le décompte de valeurs est généralement utilisé pour trouver la fréquence des valeurs présentes dans une colonne particulière.
En conclusion :
.groupby(col).count()
doit être utilisé lorsque vous souhaitez trouver la fréquence des valeurs valides présentes dans les colonnes par rapport à col
spécifié.
.value_counts()
doit être utilisé pour trouver les fréquences d'une série.