首页 > 解决方案 > 如何对最终输出的数据进行排序?

问题描述

我想将我的数据框按两列分组,然后对组内的聚合结果进行排序。

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 名的工作

标签: pythonpandasdataframesortingpandas-groupby

解决方案


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

推荐阅读