2013-12-09 8 views
6

Ecco il mio pandas.DataFrame:Ottenere le prime 3 righe che hanno la più grande somma di colonne in `pandas.DataFrame`?

 day1 day2 day3 
Apple  40  13  98 
Orange 32  45  56 
Banana 56  76  87 
Pineapple 12  19  12 
Grape  89  45  67 

voglio creare una nuova DataFrame che Volontà contiene top 3 frutti che hanno il più grande somma di tre giorni.

Somma di apple per tre giorni - 151, orange-133, banana - 219, Pineapple - 43, grape-201.
Quindi i primi 3 frutti sono: 1) banana; 2) grape; 3) apple.

Ecco un output previsto:

 day1 day2 day3 
Banana 56  76  87 
Grape  89  45  67 
Apple  40  13  98 

Come posso farlo con pandas.DataFrame?

Grazie!

risposta

9

Ecco come si ottiene gli indici per i primi 3 giorni per somma:

In [1]: df.sum(axis=1).order(ascending=False).head(3) 
Out[1]: 
Banana 219 
Grape  201 
Apple  151 

Ed è possibile utilizzare tale indice di riferimento il vostro Set di dati originale:

In [2]: idx = df.sum(axis=1).order(ascending=False).head(3).index 

In [3]: df.ix[idx] 
Out[3]: 
     day1 day2 day3 
Banana 56 76 87 
Grape  89 45 67 
Apple  40 13 98 
+0

Nota: questo non gestisce duplica le etichette nell'indice, ma farlo è meno elegante. Nota c'è un problema per nlargest in 0.14. –

+0

.order() è ora deprecato, quindi i panda stamperanno gli avvertimenti. L'alternativa è usare sort_values ​​che può essere tranquillamente sostituito per questo caso d'uso. –

Problemi correlati