You need to enable JavaScript to run this app. Pandas按Months分组对R列每2个增量值计算分组排名的实现
优惠活动
大模型
产品
解决方案
定价
更多

Pandas按Months分组对R列每2个增量值计算分组排名的实现

Pandas 分组计算等距共享排名实现

实现目标

按Months列做分组维度,每个分组内对R列按数值大小将连续递增值每2个划分为同一个排名区间,区间序号从1开始计数,完全匹配规则:

  • R=1、2 → 排名1
  • R=3、4 → 排名2
  • R=5、6 → 排名3
  • R=7 → 排名4

完整可运行代码

import pandas as pd

# 替换为你实际的DataFrame读取逻辑即可
df = pd.DataFrame({
    "Months": ["2020-10"]*4 + ["2020-11"]*6 + ["2020-12"]*3,
    "R": [1, 2, 3, 4, 1, 2, 3, 4, 5, 6, 1, 2, 3]
})

# 计算分组共享排名
df["group_rank"] = df.groupby("Months")["R"].transform(
    lambda s: ((s.rank(method="first") - 1) // 2) + 1
)

逻辑拆解

  • 用groupby("Months")锁定分组范围,所有排名计算都在同月份组内完成,不会跨组干扰
  • 用transform做分组运算,计算结果会自动对齐回原DataFrame的对应行,不需要手动做表合并
  • 用rank(method="first")给组内R值按升序分配从1开始的唯一位置序号,就算后续R值出现重复、不连续的情况,也能准确按R的大小顺序分配位置
  • 对位置序号做换算:(序号 - 1) // 2 + 1,刚好把每2个连续位置归为同一排名组,从1开始计数,完全匹配需求的排名规则

小提示:如果你百分百确定每个月份组内的R都是从1开始、无断点的连续整数,可以把计算简化为df["group_rank"] = ((df["R"] -1) // 2) + 1,但这种写法容错率很低,只要某个组的R起始值不是1,计算结果就会出错,更推荐使用分组内算相对位置的通用写法。

计算效果示例

跑完代码后得到的结果:

MonthsRgroup_rank
2020-1011
2020-1021
2020-1032
2020-1042
2020-1111
2020-1121
2020-1132
2020-1142
2020-1153
2020-1163
2020-1211
2020-1221
2020-1232

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.10 12:54:07