Maison > développement back-end > Tutoriel Python > Comment puis-je extraire efficacement les N premiers enregistrements de chaque groupe dans un DataFrame Pandas ?

Comment puis-je extraire efficacement les N premiers enregistrements de chaque groupe dans un DataFrame Pandas ?

Mary-Kate Olsen
Libérer: 2024-11-28 06:19:13
original
947 Les gens l'ont consulté

How Can I Efficiently Extract the Top N Records from Each Group in a Pandas DataFrame?

Pandas : extraire efficacement les principaux enregistrements de chaque groupe

L'obtention des meilleurs enregistrements de chaque groupe d'un DataFrame est une tâche courante dans la manipulation de données . Cet article présente plusieurs approches pour atteindre cet objectif, y compris une solution inspirée des fonctions de fenêtre SQL.

Énoncé du problème :
Étant donné un DataFrame avec une colonne de regroupement et une colonne de valeur, nous souhaitez extraire les n premiers enregistrements pour chaque groupe.

Approche naïve avec regroupement et rangée Numérotation :
Une façon d'aborder ce problème consiste à appliquer une opération de regroupement, suivie d'une approche de type fonction de fenêtre. Cela implique d'ajouter un numéro de ligne à chaque enregistrement au sein de chaque groupe, puis de filtrer les lignes supérieures en fonction de ce numéro de ligne.

Solution pratique :
Une solution plus efficace consiste à utiliser le méthode head() sur le DataFrame groupé. Par défaut, head() renvoie les n premiers enregistrements de chaque groupe. Cela correspond bien à l'objectif d'obtenir les meilleurs enregistrements.

df.groupby('id').head(2)
Copier après la connexion

Suppression du MultiIndex :
Pour supprimer le MultiIndex introduit par l'opération de regroupement, nous utilisons reset_index(drop=True) :

df.groupby('id').head(2).reset_index(drop=True)
Copier après la connexion

Sortie :

   id  value
0   1      1
1   1      2
2   2      1
3   2      2
4   3      1
5   4      1
Copier après la connexion

Approche élégante pour la numérotation des lignes :
Alors que Python n'a pas la fonction row_number() de SQL, nous pouvons répliquer ses fonctionnalités en utilisant une combinaison de groupby() et cumcount(). Voici comment :

df['row_num'] = df.groupby('id').cumcount() + 1
Copier après la connexion

Cette approche attribue un numéro de ligne unique au sein de chaque groupe sans introduire de colonnes supplémentaires ni de multi-index.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal