HOWTO · Pandas
Pandas Groupby deux colonnes
Ce tutoriel explique comment nous pouvons utiliser la méthode DataFrame.groupby() dans Pandas pour deux colonnes afin de séparer le DataFrame en groupes.
Sur cette page
Pour regrouper les lignes selon deux colonnes, transmettez leurs noms sous forme de liste à DataFrame.groupby(). Chaque paire de valeurs distincte forme un groupe. L’exemple ci-dessous utilise un seul DataFrame de six lignes pour examiner ces groupes, compter leurs lignes et trouver le sous-groupe le plus important pour chaque valeur d’emploi. Exécutez-le dans un environnement où pandas est installé ; aucun résultat d’exécution n’est revendiqué ici.
Regrouper un DataFrame selon deux colonnes
La liste ['Gender', 'Employed'] indique à pandas de regrouper les lignes selon ces deux colonnes conjointement. Par exemple, une ligne appartient au groupe Female/Yes uniquement si les deux valeurs correspondent. Le script complet est autonome et réutilise les mêmes données à chaque étape.
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
import pandas as pd
data = pd.DataFrame(
{
"Name": ["Jennifer", "Travis", "Bob", "Emma", "Luna", "Anish"],
"Gender": ["Female", "Male", "Male", "Female", "Female", "Male"],
"Employed": ["Yes", "No", "Yes", "No", "Yes", "No"],
"Age": [30, 28, 27, 24, 28, 25],
}
)
groups = data.groupby(["Gender", "Employed"])
print("Groups:")
for group_key, group_rows in groups:
print(f"{group_key}: {len(group_rows)} rows")
counts = groups.size().reset_index(name="Count")
print("\nRows per pair:")
print(counts.to_string(index=False))
largest = groups.size().groupby(level="Employed").max()
print("\nLargest subgroup per employment value:")
print(largest.to_string())
Parcourir les groupes obtenus
Parcourir groups produit une paire (group_key, group_rows) pour chaque combinaison observée. Ici, group_key contient, dans cet ordre, les valeurs des colonnes Gender et Employed, tandis que group_rows est le DataFrame qui contient les lignes correspondantes de la source. Utilisez directement le DataFrame obtenu ; le récupérer à nouveau avec get_group() répéterait la recherche. Par défaut, pandas ordonne les clés des groupes au lieu de conserver l’ordre d’apparition des groupes dans les lignes d’entrée ; les lignes à l’intérieur de chaque groupe gardent toutefois leur ordre relatif d’origine. Le bloc affiche l’intitulé « Groups: », qui reste en anglais dans l’exemple inchangé.
Compter les lignes de chaque groupe
groups.size() renvoie le nombre de lignes de chaque groupe défini par une paire. L’appel à reset_index(name="Count") transforme les deux niveaux de regroupement et leurs comptes en colonnes ordinaires, ce qui facilite l’affichage ou une opération ultérieure. size() compte les lignes même si un champ qui ne sert pas au regroupement, comme Age, contient une valeur manquante ; compter une colonne précise compterait plutôt ses valeurs non nulles et pourrait donc donner un résultat différent. La colonne Count représente ainsi le nombre de lignes pour chaque paire Gender/Employed, et non le nombre de noms ou d’âges renseignés. Le bloc affiche l’intitulé « Rows per pair: », qui reste en anglais dans l’exemple inchangé.
Trouver le groupe le plus important pour chaque valeur d’une colonne
L’expression finale part des comptes par paire, regroupe cette Series selon son niveau d’index Employed, puis applique max(). Le résultat donne la taille du sous-groupe Gender le plus important pour chaque valeur d’emploi. Dans ce jeu de données, les groupes Female/Yes et Male/No contiennent chacun deux lignes ; le plus grand sous-groupe compte donc deux lignes pour chacune des deux catégories d’emploi. Il s’agit du maximum des comptes de sous-groupes : cette opération ne sélectionne pas les lignes correspondantes et n’indique pas quel Gender a atteint le maximum. La méthode max() est également documentée séparément.