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