python pandas groupby 排序 rank/top n
python pandas groupby sort rank/top n
我有一个按州分组并汇总到忽略部门和名称的总收入的数据框。我现在想打破基础数据集,以按特定顺序显示州、部门、名称和按收入排名前 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
您可以 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
您可以将 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
我有一个按州分组并汇总到忽略部门和名称的总收入的数据框。我现在想打破基础数据集,以按特定顺序显示州、部门、名称和按收入排名前 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
您可以 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
您可以将 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