python按排序排名/前n
我有一个数据框架,它按州分组并聚合到总收入中,而忽略了部门和名称。现在,我想将基础数据集分解,以特定顺序显示州、部门、名称和收入前2名(我已经从以前的数据框中创建了一个索引,以特定顺序列出州)。使用下面的示例,我想使用我的排序索引(肯塔基州、加利福尼亚州、纽约州),该索引只列出每个州前两名的结果(按照之前规定的收入顺序): 数据集: 最终目标数据帧:python按排序排名/前n,python,pandas,rank,Python,Pandas,Rank,我有一个数据框架,它按州分组并聚合到总收入中,而忽略了部门和名称。现在,我想将基础数据集分解,以特定顺序显示州、部门、名称和收入前2名(我已经从以前的数据框中创建了一个索引,以特定顺序列出州)。使用下面的示例,我想使用我的排序索引(肯塔基州、加利福尼亚州、纽约州),该索引只列出每个州前两名的结果(按照之前规定的收入顺序): 数据集: 最终目标数据帧: State Sector Name Revenue Kentucky 3 Jill 45 Kentuc
State Sector Name Revenue
Kentucky 3 Jill 45
Kentucky 1 Roger 25
California 2 Jim 40
California 3 Roger 30
New York 1 Sally 50
New York 3 Harry 15
您可以
排序\u值
,然后使用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
您可以将
groupby
与apply
结合使用:
df.groupby('State').apply(lambda grp: grp.nlargest(2, 'Revenue'))
输出:
Sector Name Revenue
State State
California California 2 Jim 40
California 3 Roger 30
Kentucky Kentucky 3 Jill 45
Kentucky 1 Roger 25
New York New York 1 Sally 50
New York 3 Harry 15
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
然后,您可以删除多索引的第一级,以获得您想要的结果:
df.index = df.index.droplevel()
输出:
Sector Name Revenue
State State
California California 2 Jim 40
California 3 Roger 30
Kentucky Kentucky 3 Jill 45
Kentucky 1 Roger 25
New York New York 1 Sally 50
New York 3 Harry 15
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
非常感谢。这很好,nlargest很重要,因为我将把结果导出到xcel,vs head()。再次感谢你的帮助!