367 votes

Trouver la ligne où la valeur de la colonne est maximale dans un DataFrame pandas.

Comment puis-je trouver la ligne pour laquelle la valeur d'une colonne spécifique est maximum ?

df.max() me donnera la valeur maximale pour chaque colonne, je ne sais pas comment obtenir la ligne correspondante.

1 votes

Est-il possible d'obtenir les deux valeurs les plus élevées au lieu de la valeur maximale ?

9 votes

Vous pouvez utiliser sort_values et obtenir l'index : df.sort_values('col', ascending=False)[:2].index

8 votes

Paresseux1 : éviter de trier inutilement une série entière parce que c'est O(N logN) en moyenne, alors que trouver max/idxmax est seulement O(N).

14voto

CHLOE Points 41

Très simple : nous avons df comme ci-dessous et nous voulons imprimer une ligne avec la valeur maximale dans C :

A  B  C
x  1  4
y  2  10
z  5  9

En :

df.loc[df['C'] == df['C'].max()]   # condition check

Dehors :

A B C
y 2 10

12voto

najeem Points 924

Si vous voulez la rangée entière au lieu de la seule id vous pouvez utiliser df.nlargest et indiquez le nombre de lignes "supérieures" que vous souhaitez. Vous pouvez également indiquer pour quelle(s) colonne(s) vous le souhaitez.

df.nlargest(2,['A'])

vous donnera les lignes correspondant aux 2 premières valeurs de A .

utiliser df.nsmallest pour les valeurs minimales.

4voto

AntoineP Points 2032

La solution directe ".argmax()" ne fonctionne pas pour moi.

L'exemple précédent fourni par @ely

>>> import pandas
>>> import numpy as np
>>> df = pandas.DataFrame(np.random.randn(5,3),columns=['A','B','C'])
>>> df
      A         B         C
0  1.232853 -1.979459 -0.573626
1  0.140767  0.394940  1.068890
2  0.742023  1.343977 -0.579745
3  2.125299 -0.649328 -0.211692
4 -0.187253  1.908618 -1.862934
>>> df['A'].argmax()
3
>>> df['B'].argmax()
4
>>> df['C'].argmax()
1

renvoie le message suivant :

FutureWarning: 'argmax' is deprecated, use 'idxmax' instead. The behavior of 'argmax' 
will be corrected to return the positional maximum in the future.
Use 'series.values.argmax' to get the position of the maximum now.

Ma solution est donc la suivante :

df['A'].values.argmax()

2voto

Manjula Devi Points 113
mx.iloc[0].idxmax()

Cette seule ligne de code vous donnera comment trouver la valeur maximale d'une ligne dans un cadre de données, ici mx est le cadre de données et iloc[0] indique le 0e indice.

2voto

Goncalo Peres Points 1695

Considérant ce cadre de données

[In]: df = pd.DataFrame(np.random.randn(4,3),columns=['A','B','C'])
[Out]:
          A         B         C
0 -0.253233  0.226313  1.223688
1  0.472606  1.017674  1.520032
2  1.454875  1.066637  0.381890
3 -0.054181  0.234305 -0.557915

En supposant que l'on veuille connaître les lignes où la colonne "C" est maximale, la formule suivante fera l'affaire

[In]: df[df['C']==df['C'].max()])
[Out]:
          A         B         C
1  0.472606  1.017674  1.520032

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X