J'ai un dataframe qui ressemble à ce qui ressemble à ceci:
>>> select_number number_to_select currency GBP 2 EU 2 USD 1
3 Réponses :
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') )
Essayez de mélanger le df ( df = df.sample (len (df)) code>) et exécuter votre requête. Je suppose que vous auriez besoin de trier le DF à l'avance
@Maxu merci, j'ai ajouté nlargest code>, que je suis sûr que c'est plus efficace que de trier tous
Pour moi, il retourne KeyError: "UE" code>. 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'] code> à l'appel code> nlargest code>, car il me donne
nlargest () manquant 1 argument de position requise: "colonnes" code>
Quelle version de Pandas utilisez-vous? J'ai 0.18.0
@jezrael Vous avez raison, je viens de réaliser que select_number code> 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'))) code> Qu'est-ce que comme le dernier édition
Vous pouvez le faire de cette façon: sortie p> 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))'
Vous pouvez utiliser: solution avec mappage par solution2: p> explication: p> Je pense que le débogage est la meilleure fonction d'utilisation dict code>: p>
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
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