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 来获得所需的结果吗?
创建辅助列 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)
| 归档时间: |
|
| 查看次数: |
946 次 |
| 最近记录: |