web-dev-qa-db-fra.com

Quand est-il approprié d'utiliser df.value_counts () vs df.groupby ('...'). Count ()?

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()?

15
Ollie Khakwani

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 NaNs.

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
15
jezrael

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 Ou with 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.

17
Bharath M