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
930 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!

source:php.cn
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