python - 如何对最终输出的数据进行排序?
问题描述
我想将我的数据框按两列分组,然后对组内的聚合结果进行排序。
In [167]:df
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
df.groupby(['job','source']).agg({'count':sum})
Out[168]:
job source count
market A 5
B 3
C 2
D 4
E 1
sales A 2
B 4
C 6
D 3
E 7
我现在想在每个组中按降序对计数列进行排序。然后只取前三行。得到类似的东西:
job source count
market A 5
D 4
B 3
sales E 7
C 6
B 4
我想进一步对这个问题进行排序job
,所以如果销售额的总和更多,我希望将数据打印为
job source count
sales E 7
C 6
B 4
market A 5
D 4
B 3
我无法获得前 5 名的工作
解决方案
IIUC,我们可以做进一步groupby
并使用nlargest(3)
来获得前 n 个值。
然后我们可以创建一个有序列表来对您的最高值进行排序并创建一个分类列。
s = df.groupby(['job','source']).agg({'count':sum}).groupby(level=0)['count']\
.nlargest(3).reset_index(0,drop=True).to_frame()
# see which of your indices is higher and create a sorting list.
sorter = s.groupby(level=0)['count'].sum().sort_values(ascending=False).index
#Index(['sales', 'market'], dtype='object', name='job')
s['sort'] = pd.Categorical(s.index.get_level_values(0),sorter)
df2 = s.sort_values('sort').drop('sort',axis=1)
print(df2)
count
job source
sales E 7
C 6
B 4
market A 5
D 4
B 3
推荐阅读
- c# - 当我单击 GroupBox 内的更改按钮时,数据网格和数据库中的名称都会更改,但人的性别没有更改
- python - 当以秒计算时,需要以小时绘制余弦函数
- android - 无法打开刚刚上传到 Play 商店的应用 java.lang.UnsatisfiedLinkError:
- javascript - 如何在chartjs图上显示指数平滑?
- ios - 如何从 Material Inspector 设置 colorBufferWriteMask
- python-2.7 - 从 Python 运行 Matlab 脚本:TypeError: 'float' object is not iterable
- macos - 如何卸载 VS 代码
- mysql - 如何使用给定数字的where子句并显示哪些行包含给定数字的人
- mendeley - 卸载了mendeley,但引文插件仍然出现在word中
- r - 基本数据集调用