Pandas propose plusieurs façons de trouver la valeur la plus fréquente dans une colonne d'une dataframe. La plus simple consiste à utiliser la méthode mode(), qui renvoie la valeur la plus fréquente.
Commençons par générer une DataFrame pandas :
import pandas as pd
import numpy as np
import random
np.random.seed(42)
data = np.random.randint(0,5,10)
data = { 'Age':np.random.randint(0,5,10)+20,
'Gender':[np.random.choice(['Male', 'Female', 'Unknown']) for i in range(10)]
}
df = pd.DataFrame(data,columns=['Age','Gender'])
print(df)
donne
Age Gender
0 23 Female
1 22 Female
2 24 Male
3 21 Male
4 23 Male
5 21 Unknown
6 23 Unknown
7 24 Unknown
8 20 Female
9 23 Unknown
Utilisation de la méthode mode() de pandas
Pour trouver la valeur la plus fréquente dans la colonne "Âge" :
df['Age'].mode()
donne
0 23
Name: Age, dtype: int64
Pour obtenir la valeur :
df['Age'].mode()[0]
Pour donner un autre exemple, considérez la colonne "Genre" contenant des variables catégoriques.
df['Gender'].mode()
donne
0 Unknown
Name: Gender, dtype: object
Utilisation de value_counts() de pandas
Une autre approche utile consiste à utiliser la méthode value_counts(). Cela vous donne une liste complète des valeurs dans une colonne, ainsi que le nombre de fois où chacune apparaît. Vous pouvez ensuite utiliser ces informations pour déterminer quelle valeur est la plus fréquente:
df['Age'].value_counts()
donne
23 4
24 2
21 2
22 1
20 1
Name: Age, dtype: int64
Pour accéder à la valeur la plus fréquente, une solution consiste à faire:
df['Age'].value_counts().index[0]
donne
23
Et pour obtenir le nombre d'occurrences de 23.
df['Age'].value_counts().values[0]
donne
4
Utilisation de pandas groupby()
Enfin, si votre ensemble de données contient plusieurs colonnes qui contiennent des valeurs en double, il peut être utile d'utiliser les méthodes groupby() et size() pour regrouper les valeurs similaires ensemble, puis trouver celle qui est la plus fréquente. Cette approche peut être utile si vous souhaitez comparer plusieurs colonnes à la fois.
Exemple:
df.groupby(by='Gender').agg('count')
donne
Age
Gender
Female 3
Male 3
Unknown 4
Trier les valeurs par âge :
dfg = df.groupby(by='Gender').agg('count')
dfg.sort_values(by='Age',ascending=False)
Extraire la première ligne :
dfg.sort_values(by='Age',ascending=False).reset_index().iloc[0]
donne
Gender Unknown
Age 4
Name: 0, dtype: object
Références
Liens | Site |
---|---|
mode() | pandas.pydata.org |
value_counts() | pandas.pydata.org |
groupby() | pandas.pydata.org |