7
votes

Sélection de Top N éléments de chaque groupe de Pandas Groupby

J'ai un dataframe qui ressemble à ce qui ressemble à ceci:

>>> select_number
          number_to_select
currency       
GBP         2
EU          2
USD         1


3 commentaires

Veuillez vérifier Ceci Réponse


@Maxu est-ce que cette réponse couvre le nombre de variable de la variable de haut niveau?


@Ians, tu as raison, j'ai ajouté une réponse


3 Réponses :


3
votes

Voici une solution:

select_number = select_number['number_to_select']  # easier to select from series

df.groupby('currency').apply(
    lambda dfg: dfg.nlargest(select_number[dfg.name], columns='price')
)


8 commentaires

Essayez de mélanger le df ( df = df.sample (len (df)) ) et exécuter votre requête. Je suppose que vous auriez besoin de trier le DF à l'avance


@Maxu merci, j'ai ajouté nlargest , que je suis sûr que c'est plus efficace que de trier tous


Pour moi, il retourne KeyError: "UE" . Peux-tu le vérifier? Je ne sais pas pourquoi, mais toujours la même erreur (je teste dfg.name aussi).


Vous devriez également ajouter , colonnes = ['prix'] à l'appel nlargest , car il me donne nlargest () manquant 1 argument de position requise: "colonnes"


Quelle version de Pandas utilisez-vous? J'ai 0.18.0


@jezrael Vous avez raison, je viens de réaliser que select_number est un fichier de données dans la question de l'OP. Je l'avais défini comme une série.


C'est une réponse d'équipe :)


Ou réponse peut être print (data.groupby ("devise"). Appliquer (lambda dfg: dfg.nlargest (select_number.number_to_select [nommé], colonnes = 'Prix'))) Qu'est-ce que comme le dernier édition



1
votes

Vous pouvez le faire de cette façon: xxx pré>

sortie p> xxx pré>

explication: p>

rn code> - est une colonne d'assistrage - Row_Number par partition / groupe, trié en descendant par Price code> (à l'intérieur de ce groupe) p>

QRY code> - est dynamiquement Query généré P>

In [149]: qry
Out[149]: '((currency=="EU") & (rn<=2)) | ((currency=="GBP") & (rn<=2)) | ((currency=="USD") & (rn<=1))'


0 commentaires

11
votes

Vous pouvez utiliser: xxx pre> xxx pré>

solution avec mappage par dict code>: p> xxx pré >

solution2: p> xxx pré>

explication: p>

Je pense que le débogage est la meilleure fonction d'utilisation f code> avec Imprimer CODE>: P>

  currency  id  price
0       EU   2   1050
1       EU   5   1400
2       EU   4   1750
3       EU   8   4000
  currency  id  price
0       EU   2   1050
1       EU   5   1400
2       EU   4   1750
3       EU   8   4000
EU
2
  currency  id  price
3       EU   8   4000
2       EU   4   1750
  currency  id  price
4      GBP   7    630
5      GBP   1   1000
6      GBP   9   1400
GBP
2
  currency  id  price
6      GBP   9   1400
5      GBP   1   1000
  currency  id  price
7      USD   3   2000
8      USD   6   7000
USD
1
  currency  id  price
8      USD   6   7000

           currency  id  price
currency                      
EU       3       EU   8   4000
         2       EU   4   1750
GBP      6      GBP   9   1400
         5      GBP   1   1000
USD      8      USD   6   7000


0 commentaires