pandas 排序和排名

612 字
3 分钟
pandas 排序和排名

pandas 排序和排名#

排序和排名经常用于找 Top N、生成榜单、筛选异常值。看起来简单,但升降序、并列名次和分组排名都需要明确规则。

如果规则没说清楚,同一份数据可能排出不同结果。

基础排序#

top = df.sort_values(
by=["score", "created_at"],
ascending=[False, True],
)
print(top.head(10))

多字段排序时,要明确每个字段的升降序。比如分数越高越靠前,时间越早越靠前。

排名方法#

df["rank_min"] = df["score"].rank(method="min", ascending=False)
df["rank_dense"] = df["score"].rank(method="dense", ascending=False)
df["rank_first"] = df["score"].rank(method="first", ascending=False)

min 会让并列项占用名次,dense 不跳号,first 按出现顺序打破并列。榜单规则不同,选择也不同。

分组内排名#

df["rank_in_class"] = (
df.groupby("class")["score"]
.rank(method="dense", ascending=False)
)
top3 = df[df["rank_in_class"] <= 3]

容易出错的点#

  • 数值列被读成字符串,100 可能排在 20 前后不符合预期。

  • 没有说明并列分数怎么处理。

  • 排序后忘记重置索引,展示时看起来顺序混乱。

  • Top N 是全局 Top N,还是每组 Top N,没有定义清楚。

实战复盘#

复用《pandas 排序和排名》时,不要只复制代码块。先把自己的字段名、数据口径和异常规则写出来,再替换示例里的列名。pandas 的函数很通用,但业务字段的含义不能自动迁移。

每次处理完成后,我会抽样看几条原始记录和处理后记录。尤其是日期、金额、分类字段,机器统计和肉眼抽查要一起做,才能发现格式看似正常但含义错位的问题。

这类文章后续可以继续补充真实小表格作为输入示例。输入、处理、输出三者都出现,教程才不会变成只解释 API。

最小验收样例#

验收《pandas 排序和排名》时,我会手写一个三到五行的小 DataFrame:一行正常数据,一行缺失或异常数据,一行边界数据。先让示例在小表上跑通,再换成完整数据集。

小表的好处是结果可以人工计算。只要人工结果和 pandas 输出对不上,就说明代码逻辑或字段口径还没想清楚。这个过程比直接在大表上调试更可靠。

小结#

排序和排名要先写清规则,再写代码。特别是并列名次和分组排名,不能靠默认参数碰运气。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

pandas 排序和排名
https://blog.tjcheng.cn/posts/backfill/2026-05-18/pandas-sort-rank-note/
作者
TengJinCheng
发布于
2026-05-18
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
TengJinCheng
Hello, I'm Teng.
公告
欢迎来到TengJinCheng工作铺!
音乐
封面

音乐

暂未播放

0:000:00
暂无歌词
分类
标签
站点统计
文章
157
分类
7
标签
114
总字数
109,939
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.13.4
文章许可
CC BY-NC-SA 4.0

文章目录