2013-12-09 8 views
6

は、ここに私のpandas.DataFrameです:`pandas.DataFrame`の列の合計が最も多い3行を取得していますか?

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

私は意志が三日の最大の合計を持っているトップ3の果物を含む新しいDataFrameを作成したいです。

appleの合計3日間 - 151orangeから133banana - 219Pineapple - 43grapeから201
したがって、トップ3の果物は:1)bananaです。 2)grape; 3)apple。ここで

は、期待される出力です:

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

私はpandas.DataFrameでそれを行うことができますどのように?

ありがとうございました!

答えて

9

は、ここでは、合計でトップ3日間のインデックスを取得する方法は次のとおりです。

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

そして、あなたはあなたの元DATSETを参照するためにそのインデックスを使用することができます。

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

注:これは処理しません索引にラベルを複製しますが、そうするにはあまりエレガントではありません。 0.14でnlargestに問題があることに注意してください。 –

+0

.order()は廃止予定です。したがって、pandasは警告を出力します。代わりに、このユースケースで安全に置き換えられるsort_valuesを使用することです。 –

関連する問題