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

如何用transform替代merge与临时列实现Pandas特殊索引排名?

优化方案:用transform直接生成目标rank列

可以通过groupby.transform方法直接完成计算,完全避免临时列和merge操作,代码更简洁高效:

import pandas as pd
import io

data = '''
category,sub_cat
A,a
A,c
A,d
B,c
B,d
D,a
D,b
D,c
G,b
G,c
G,e
G,f
G,h
'''

df = pd.read_csv(io.StringIO(data), sep=',')

# 核心逻辑:分组计算相对位置
df['rank'] = df.groupby('category').transform(
    lambda group: group.cumcount() - group[group['sub_cat'] == 'c'].cumcount().iloc[0]
)

print(df)

关键逻辑说明

  • group.cumcount():生成每组内从0开始的行位置索引,替代原代码的cat_index临时列。
  • group[group['sub_cat'] == 'c'].cumcount().iloc[0]:定位每组中sub_cat='c'行的组内位置,替代原代码的c_idx临时列。
  • transform方法会将每组的计算结果广播回原DataFrame的对应行,自动完成组间重置,无需额外的merge操作。

输出结果

运行后直接得到包含rank列的目标DataFrame,没有任何临时列:

category sub_cat  rank
0         A       a    -1
1         A       c     0
2         A       d     1
3         B       c     0
4         B       d     1
5         D       a    -2
6         D       b    -1
7         D       c     0
8         G       b    -1
9         G       c     0
10        G       e     1
11        G       f     2
12        G       h     3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 21:15:17