2017-02-16 4 views
0

私はこのようになりますリストを持っている:パンダのデータフレームに各グループの最上位3行を保持する方法は?

var1  var2 count 
A  abc  4 
A  abc  3 
A  abc  2 
A  abc  1 
A  abc  1 
B  abc  7 
B  abc  5 
B  abc  2 
B  abc  1 
B  abc  1 
C  abc  4 
C  abc  3 
C  abc  2 
C  abc  1 
C  abc  1 

.... 

私は、各グループから上位3「・カウント」の結果と新しいデータフレームを作成します。これは次のようになります:

 var1  var2 count 
     A  abc  4 
     A  abc  3 
     A  abc  2 
     B  abc  7 
     B  abc  5 
     B  abc  2 
     C  abc  4 
     C  abc  3 
     C  abc  2 
     .... 

これをPythonでhead()を使って行う便利な方法はありますか? 列が降順でソートされた

答えて

4

ソリューション:

df = df.set_index('var2').groupby("var1")['count'].nlargest(3).reset_index() 
print (df) 
    var1 var2 count 
0 A abc  4 
1 A abc  3 
2 A abc  2 
3 B abc  7 
4 B abc  5 
5 B abc  2 
6 C abc  4 
7 C abc  3 
8 C abc  2 
2

場合は、あなただけの各グループから最初の3行を取るためにgroupby.headを使用することができます。

df.groupby("var1").head(3) 

enter image description here

そうでない場合、あなたはグループのことが可能データフレームをvar1で置き換え、nlargestを使用して、上位3カウントの3つの行を検索します。

df.groupby("var1", group_keys=False).apply(lambda g: g.nlargest(3, "count")) 
set_indexgroupbySeriesGroupBy.nlargest

enter image description here

関連する問題