Maison >développement back-end >Tutoriel Python >Comment trouver des lignes avec des valeurs de nombre maximales dans des groupes dans Pandas ?
Regrouper les données et récupérer les lignes avec des valeurs de nombre maximales
Pour déterminer les lignes avec des valeurs de nombre maximales dans les groupes, des opérations groupby peuvent être utilisées sur un DataFrame pandas.
Considérez ce qui suit DataFrame :
Sp | Mt | Value | count |
---|---|---|---|
MM1 | S1 | a | 3 |
MM1 | S1 | n | 2 |
MM1 | S3 | cb | 5 |
MM2 | S3 | mk | 8 |
MM2 | S4 | bg | 10 |
MM2 | S4 | dgd | 1 |
MM4 | S2 | rd | 2 |
MM4 | S2 | cb | 2 |
MM4 | S2 | uyi | 7 |
Exemple 1 :
Notre objectif est d'identifier les lignes au sein de chaque groupe (définies par ['Sp', 'Mt']) qui ont la valeur de comptage la plus élevée. Dans l'exemple 1, nous avons le résultat attendu suivant :
Sp | Mt | Value | count |
---|---|---|---|
MM1 | S1 | a | 3 |
MM1 | S3 | cb | 5 |
MM2 | S3 | mk | 8 |
MM2 | S4 | bg | 10 |
MM4 | S2 | uyi | 7 |
Pour y parvenir, nous pouvons d'abord obtenir la valeur de comptage maximale pour chaque groupe :
df.groupby(['Sp', 'Mt'])['count'].max()
Ce qui produit :
Sp | Mt | |
---|---|---|
MM1 | S1 | 3 |
MM1 | S3 | 5 |
MM2 | S3 | 8 |
MM2 | S4 | 10 |
MM4 | S2 | 7 |
Ensuite, pour extraire les indices du DataFrame d'origine où la valeur de comptage est égale à la valeur maximale dans chaque group :
idx = df.groupby(['Sp', 'Mt'])['count'].transform(max) == df['count'] df[idx]
Ce qui donne le résultat souhaité.
Exemple 2 :
Dans l'exemple 2, le résultat attendu est le suivant :
Sp | Mt | Value | count |
---|---|---|---|
MM2 | S4 | bg | 10 |
MM4 | S2 | cb | 8 |
MM4 | S2 | uyi | 8 |
Dans ce scénario, il existe plusieurs lignes dans le groupe MM4 avec la valeur de comptage maximale (8). En utilisant la même approche que précédemment, nous obtenons les deux lignes :
Sp | Mt | Value | count |
---|---|---|---|
MM2 | S4 | bg | 10 |
MM4 | S2 | cb | 8 |
MM4 | S2 | uyi | 8 |
Mise à jour :
Si l'objectif est d'ajouter une nouvelle colonne au DataFrame indiquant la valeur de comptage maximale au sein de chaque groupe, nous pouvons utiliser la méthode de transformation pour calculer la valeur de chacun row :
df.groupby(['Sp', 'Mt'])['count'].max()
Cela donnera un DataFrame qui inclut la colonne count_max, qui contient la valeur de comptage maximale pour chaque groupe :
Sp | Mt | Value | count | count_max |
---|---|---|---|---|
MM1 | S1 | a | 3 | 3 |
MM1 | S1 | n | 2 | 3 |
MM1 | S3 | cb | 5 | 5 |
MM2 | S3 | mk | 8 | 8 |
MM2 | S4 | bg | 10 | 10 |
MM2 | S4 | dgd | 1 | 10 |
MM4 | S2 | rd | 2 | 7 |
MM4 | S2 | cb | 2 | 7 |
MM4 | S2 | uyi | 7 | 7 |
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!