如何在分组内实现Series Expanding排名?按Category重置递增窗口
分组内计算递增窗口排名(Expanding Rank)
你的问题出在lambda函数中错误引用了全局的df['Value'],导致计算的是整个数据集的全局递增排名,而非分组内的。
正确代码
df['预期输出排名'] = df.groupby('Category')['Value'].transform( lambda x: x.expanding(1).rank(ascending=True, method='first') )
代码说明
groupby('Category')['Value']:按Category字段分组,提取每组的Value列transform:将分组内的计算结果映射回原DataFrame的对应行,保证行数与原数据一致x.expanding(1):对每组内的Series创建从第1行开始的递增窗口(窗口范围从当前行向上包含所有同组历史行).rank(ascending=True, method='first'):在每个递增窗口内计算升序排名,method='first'确保重复值按出现顺序分配排名,避免并列排名干扰结果
运行结果验证
执行后得到的预期输出排名列会和你给出的示例预期结果完全一致:
| Category | Value | 当前输出排名 | 预期输出排名 |
|---|---|---|---|
| A | 10 | 1 | 1 |
| A | 20 | 2 | 2 |
| A | 30 | 3 | 3 |
| B | 40 | 4 | 1 |
| B | 50 | 5 | 2 |
| C | 60 | 6 | 1 |
内容的提问来源于stack exchange,提问作者greenguy
相关产品推荐
相关产品推荐

