Pandas groupby场景下如何生成倒序排列的非0起始分组序列号
分组内倒序序列号实现方法
直接使用如下代码即可实现需求:
dfm["serial"] = dfm.groupby("token").transform("size") - dfm.groupby("token").cumcount()
原理说明
dfm.groupby("token").transform("size")会给每个分组内的所有行返回对应分组的总条数,自动适配动态变化的分组行数,无需手动绑定固定数值- 用分组总条数减去从0开始计数的正序分组序号
cumcount(),刚好得到你需要的倒序效果:分组第一行值为分组总行数,最后一行值为1,完全匹配预期。
效果校验
以你给出的示例数据为例,该分组总条数为5,逐行计算结果如下:
| 序号 | token | 计算过程 | 最终serial值 |
|---|---|---|---|
| 0 | 295368217 | 5 - 0 | 5 |
| 1 | 294638348 | 5 - 1 | 4 |
| 2 | 165168249 | 5 - 2 | 3 |
| 3 | 425388540 | 5 - 3 | 2 |
| 4 | 284673354 | 5 - 4 | 1 |
和你给出的预期结果完全一致。
内容的提问来源于stack exchange,提问作者niwirox
相关产品推荐
相关产品推荐

