データフレームを 2 つの列でグループ化し、それらのグループ内で集計結果を並べ替えたいと考えています。
In [167]: df
Out[167]:
count job source
0 2 sales A
1 4 sales B
2 6 sales C
3 3 sales D
4 7 sales E
5 5 market A
6 3 market B
7 2 market C
8 4 market D
9 1 market E
In [168]: df.groupby(['job','source']).agg({'count':sum})
Out[168]:
count
job source
market A 5
B 3
C 2
D 4
E 1
sales A 2
B 4
C 6
D 3
E 7
ここで、各グループ内で「count」列を降順で並べ替え、上位 3 行のみを取得したいと思います。次のようになります。
count
job source
market A 5
D 4
B 3
sales E 7
C 6
B 4
ベストアンサー1
最初にソートを実行し、head を使用して各グループの最初の 3 つを取得することで、一度に実行することもできます。
In[34]: df.sort_values(['job','count'],ascending=False).groupby('job').head(3)
Out[35]:
count job source
4 7 sales E
2 6 sales C
1 4 sales B
5 5 market A
8 4 market D
6 3 market B