根据分类列的值数量对 pandas 数据框进行排序

use*_*579 2 python dataframe pandas

示例数据集如下所示

第 1 列 列2 第 3 列
A 1 作为
A 2 标准差
3 df
C 5 弗格
D 6 GH
A 1 哈吉
3 jk
4 kt
A 1 关于
C 5 我们
D 6 qw
D 7

我想根据每个项目出现的次数对列 col1 进行排序,例如 A 出现 4 次,B 和 D 出现 3 次,C 出现 2 次。数据帧应按 A,A,A,A,B,B,B,D,D,D,C,C 排序,以便

有没有办法达到同样的目的?我可以使用 sort_values 来获得所需的结果吗?

jez*_*ael 5

创建辅助列 by Series.mapwithSeries.value_counts并使用它进行排序 with col1by DataFrame.sort_values

df['new'] = df['col1'].map(df['col1'].value_counts())
#alternative
#df['new'] = df.groupby('col1')['col1'].transform('count')

df1 = df.sort_values(['new','col1'], ascending=[False, True]).drop('new', axis=1)
Run Code Online (Sandbox Code Playgroud)

一条线解决方案:

df1 = (df.assign(new =df['col1'].map(df['col1'].value_counts()))
         .sort_values(['new','col1'], ascending=[False, True])
         .drop('new', axis=1))

print (df1)
   col1  col2 col3
0     A     1   as
1     A     2   sd
5     A     1   hj
8     A     1   re
2     B     3   df
6     B     3   jk
7     B     4   kt
4     D     6   gh
10    D     6   qw
11    D     7   aa
3     C     5   fg
9     C     5   we
Run Code Online (Sandbox Code Playgroud)