我有一个按州分组的数据框,汇总到总收入,其中扇区和名称被忽略。我现在想要打破底层数据集,以按特定顺序按收入显示状态,扇区,名称和前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
结束目标数据框:
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
答案 0 :(得分: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
答案 1 :(得分:2)
您可以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
然后你可以放弃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