web-dev-qa-db-fra.com

Triez le cadre de données des pandas et imprimez les n valeurs les plus élevées

J'ai un cadre de données pandas et je souhaite trier la colonne ('Octets') par ordre décroissant et imprimer les 10 valeurs les plus élevées et la valeur de colonne correspondante "IP du client". Supposons que cela fasse partie de mon cadre de données. J'ai beaucoup de méthodes différentes et a échoué? 

0       Bytes    Client Ip                
0       1000      192.168.10.2    
1       2000      192.168.10.12    
2       500       192.168.10.4     
3       159       192.168.10.56 

Le suivi de n’imprime que le brut qui a la valeur la plus élevée. 

print df['Bytes'].argmax()
25

Je pense que vous pouvez utiliser nlargest (Nouveauté de pandas version 0.17.0):

print df
   0  Bytes  Client             Ip
0  1      1    1000   192.168.10.2
1  0      0    2000  192.168.10.12
2  2      2     500   192.168.10.4
3  3      3     159  192.168.10.56

print df.nlargest(3, 'Client')
   0  Bytes  Client             Ip
1  0      0    2000  192.168.10.12
0  1      1    1000   192.168.10.2
2  2      2     500   192.168.10.4
26
jezrael

Remarque:sort est obsolète - utilisez plutôt sort_values

Pour sort décroissant, utilisez ascending=False:

In [6]: df.sort('Bytes', ascending=False)
Out[6]:
   0  Bytes      Client Ip
1  1   2000  192.168.10.12
0  0   1000   192.168.10.2
2  2    500   192.168.10.4
3  3    159  192.168.10.56

Pour prendre les 10 premières valeurs, utilisez .head(10) .

22
Andy Hayden
df['Bytes'] = df['Bytes'].astype('int')
print df.sort('Bytes', ascending=False).head(10)[['Bytes', 'Client-IP']]

Je pourrais le résoudre en utilisant le code ci-dessus avec l'aide de Andy Hayden. :RÉ

2
df[['Bytes', 'Client Ip']].sort_values('Bytes', ascending=False).nlargest(10, 'Bytes')

Cela devrait vous fournir tout ce dont vous avez besoin 1) Trier les octets 2) Renvoyer les 10 valeurs les plus grandes

1
megamind