python pandas groupby排序排名/前n名

2024-04-28 06:09:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个按州分组的数据帧,并将其汇总为总收入,其中部门和名称被忽略。现在,我想将底层数据集按一定的顺序按收入显示状态、部门、名称和前2名(我已经从以前的数据帧创建了一个索引,该索引按一定的顺序列出了状态)。在下面的例子中,我想使用我的排序索引(肯塔基州、加利福尼亚州、纽约州),它只列出每个州前两个结果(按收入顺序排列): 数据集:

State       Sector   Name   Revenue
California  1        Tom    10
California  2        Harry  20
California  3        Roger  30
California  2        Jim    40
Kentucky    2        Bob    15
Kentucky    1        Roger  25
Kentucky    3        Jill   45
New York    1        Sally  50
New York    3        Harry  15

最终目标数据帧:

^{pr2}$

Tags: 数据名称new顺序状态例子部门汇总
2条回答

您可以sort_values,然后使用groupby+head

df.sort_values('Revenue',ascending=False).groupby('State').head(2)
Out[208]: 
        State  Sector   Name  Revenue
7     NewYork       1  Sally       50
6    Kentucky       3   Jill       45
3  California       2    Jim       40
2  California       3  Roger       30
5    Kentucky       1  Roger       25
8     NewYork       3  Harry       15

您可以在传导中使用groupbyapply

df.groupby('State').apply(lambda grp: grp.nlargest(2, 'Revenue'))

输出:

^{pr2}$

然后,您可以删除MultiIndex的第一级,以获得所需的结果:

df.index = df.index.droplevel()

输出:

         Sector Name    Revenue
State           
California  2   Jim     40
California  3   Roger   30
Kentucky    3   Jill    45
Kentucky    1   Roger   25
New York    1   Sally   50
New York    3   Harry   15

相关问题 更多 >