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

Pandas如何用groupby transform实现排名 替代groupby rank+merge方案

以下两种实现方式均可达到你要求的效果,性能优于你当前使用的merge方案:


方案1:map映射实现(性能最优,写法最简洁)

直接构造id与rank的映射关系,再赋值到原表,无需合并操作:

import pandas as pd

data = {
    "id": [1,1,2,2,3,3,4,4,5,5],
    "value": [10,10,20,20,30,30,40,40,20,20]
}
df = pd.DataFrame(data)

# 生成id到rank的映射
id_rank_map = df.drop_duplicates("id").set_index("id")["value"].rank(method="first", ascending=False)
df["rank"] = df["id"].map(id_rank_map)

方案2:groupby.transform实现(符合你指定的transform语法要求)

# 仅给每个id的首行计算rank,再按id分组广播到所有同id行
first_id_mask = ~df["id"].duplicated()
df.loc[first_id_mask, "rank"] = df.loc[first_id_mask, "value"].rank(method="first", ascending=False)
df["rank"] = df.groupby("id")["rank"].transform("first")

两种方案的输出和你原有代码的输出完全一致,且避免了merge操作带来的额外内存开销,数据量越大性能优势越明显。

内容的提问来源于stack exchange,提问作者Raymond Toh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:15:01