Problème :
Récupérer toutes les lignes d'un DataFrame Pandas qui ont la valeur maximale pour la colonne "count", regroupée par "Sp" et "Mt" colonnes.
Exemples :
Exemple 1 :
DataFrame d'entrée :
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 |
Attendu Sortie :
Sp | Mt | Value | count |
---|---|---|---|
MM1 | S1 | a | 3 |
MM1 | S3 | cb | 5 |
MM2 | S3 | mk | 8 |
MM2 | S4 | bg | 10 |
MM4 | S2 | uyi | 7 |
Exemple 2 :
DataFrame d'entrée :
Sp | Mt | Value | count |
---|---|---|---|
MM2 | S4 | bg | 10 |
MM2 | S4 | dgd | 1 |
MM4 | S2 | rd | 2 |
MM4 | S2 | cb | 8 |
MM4 | S2 | uyi | 8 |
Sortie attendue :
Sp | Mt | Value | count |
---|---|---|---|
MM2 | S4 | bg | 10 |
MM4 | S2 | cb | 8 |
MM4 | S2 | uyi | 8 |
Solution :
import pandas as pd df.groupby(['Sp', 'Mt'])['count'].max()
Ceci renvoie une série avec le nombre maximum pour chaque combinaison unique de « Sp » et « Mt ».
idx = df.groupby(['Sp', 'Mt'])['count'].transform(max) == df['count']
Cela crée un masque booléen où True indique les lignes avec le nombre maximum au sein de leur groupe.
df[idx]
Cela filtre le DataFrame pour inclure uniquement les lignes où le masque idx est True, ce qui donne le résultat souhaité.
Remarque : Plusieurs lignes avec un maximum égal le décompte sera renvoyé s'ils se produisent dans le même groupe.
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!