Clarifiation sur la méthode mode()

Ceci n’est pas une question mais une clarification car certains ont des difficultés à comprendre Series.mode() et l’objet qu’elle renvoie. Series.mode() renvoie toujours une objet de type Series car le mode n’est pas nécessairement une valeur unique. L’exemple ci-dessous l’illustre clairement (j’espère ;-).

import pandas as pd

# L'âge de chaque participant au Bootcamp (triée uniquement pour la lisibilité) :

ages  = [26, 26, 26, 30, 30, 31, 31, 31, 34, 34, 34, 36, 40, 42, 42, 42, 45, 45, 52, 58, 59, 60]
print("L'âge de chaque participant : ", ages,'\n')
df = pd.DataFrame({ 'Age': pd.Series(ages) })


# Calculer et afficher le nombre d'élèves pour chaque âge :

print("Nombre d'élèves pour chaque âge par fréquence décroissante :")
age_freq = df.Age.value_counts()
display(age_freq)

# Afficher le*s* mode*s* de ces observations :

print("Le*s* mode*s* de la série (ici les 4 âges qui apparaissent 3 fois) :")
display(df.Age.mode())

# Bonus : extraire les âges correspondant aux n valeurs de fréquence les plus élevées :

n=2
print(f"Ages ayant les {n} plus hautes fréquences (3 et 2) : ")
age_freq[age_freq.apply(lambda x : x in age_freq.unique()[0:n])]

Le code produit l’output ci-dessus :

L'âge de chaque participant :  [26, 26, 26, 30, 30, 31, 31, 31, 34, 34, 34, 36, 40, 42, 42, 42, 45, 45, 52, 58, 59, 60] 

Nombre d'élèves pour chaque âge par fréquence décroissante :
31    3
26    3
42    3
34    3
30    2
45    2
60    1
59    1
52    1
58    1
40    1
36    1
Name: Age, dtype: int64
Le*s* mode*s* de la série (ici les 4 âges qui apparaissent 3 fois) :
0    26
1    31
2    34
3    42
dtype: int64
Ages ayant les 2 plus hautes fréquences (3 et 2) : 
31    3
26    3
42    3
34    3
30    2
45    2
Name: Age, dtype: int64

Dernière remarque : la série renvoyée par mode() peut être vide dans 2 cas : quand il n’y a aucune ligne dans la série ou bien quand toutes les lignes ont des valeurs NA et l’argument dropna de la méthode mode() est à true (le défaut).

Bonjour Noël,

Je vous remercie pour votre éclairage sur la méthode mode().
Je n’ai rien à ajouter, c’est parfait.

Antoine