You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按Name列出现频次从高到低排序DataFrame并保留原结构

解决方案

要实现按Name出现频次从高到低排序、同Name记录聚合且保留原列结构的需求,你可以通过以下两种简洁方法实现:

方法一:临时计数列辅助排序

先为每条记录添加对应Name的出现次数,再基于该次数排序后移除临时列:

# 统计每个Name的出现次数
name_freq = df['Name'].value_counts()
# 为原DataFrame添加频次列
df['freq'] = df['Name'].map(name_freq)
# 按频次降序排序,同频次的Name保持原组内顺序
df = df.sort_values(by='freq', ascending=False)
# 移除临时频次列并重置索引(可选,按需保留原索引可省略reset_index)
df = df.drop(columns='freq').reset_index(drop=True)

方法二:利用sort_values的key参数(更简洁)

直接通过key参数映射Name的频次,无需创建临时列:

df = df.sort_values(
    by='Name',
    key=lambda col: col.map(col.value_counts()),
    ascending=False
).reset_index(drop=True)

结果说明

两种方法都会得到你需要的输出结构:

Name  Age
0  Mukul   22
1  Mukul   21
2  Rohan   22
3  Rohan   24
4  Robin   20
5  Manoj   20
6  Kamal   21

其中同Name的记录会聚合在一起,且按出现频次从高到低排列,组内记录保留原DataFrame中的顺序。

你之前的代码使用groupby做了聚合统计,所以得到的是频次汇总表而非原结构的排序结果,上述方法则是对原数据行进行排序,完全符合需求。

内容的提问来源于stack exchange,提问作者Ritesh Mukhopadhyay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 21:52:52