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

Pandas按Rank自定义排序规则分组生成递增值新列的实现方法

实现方法

核心思路是利用Pandas有序分类类型自定义Rank优先级,配合原生分组排序编号逻辑实现需求,全程走向量化运算,是处理千万级以下数据集效率最高的方案,同时支持灵活修改优先级规则。

完整实现代码

import pandas as pd

# 构造示例数据集
data = {
    'Name': ['A','A','A','A','A','B','B','B','B','C','C','C'],
    'Rank': ["'A3'","'A3'","'A2'","'A2'","'A2'","'A1'","'A1'","'A1'","'A1'","'A3'","'A3'","'A2'"],
    'Months': [2,2,3,3,3,4,4,4,4,2,2,1]
}
df = pd.DataFrame(data)

# 1. 自定义Rank优先级,优先级从高到低,后续调整顺序直接修改该列表即可
# 如果你的Rank列无单引号,直接改为 rank_priority = ["A1", "A2", "A3"]
rank_priority = ["'A1'", "'A2'", "'A3'"]

# 2. 将Rank列转为有序分类类型,自动遵循指定优先级排序
df['Rank'] = pd.Categorical(df['Rank'], categories=rank_priority, ordered=True)

# 3. 分组生成递增编号,保留原始行顺序
df['NewIncremental'] = 'P' + df.groupby('Name', group_keys=False)\
                               .apply(lambda x: x.sort_values('Rank').cumcount() + 1)\
                               .astype(str)\
                               .sort_index()

print(df)

逻辑说明

  • 有序分类类型的设计天然支持自定义排序规则,不需要额外做数值映射,修改优先级时只需调整rank_priority列表顺序
  • 分组内按Rank优先级排序后生成编号,再通过sort_index()映射回原始行的位置,不会打乱原始数据的排列顺序
  • 所有操作都是Pandas原生向量化实现,避免Python级别的循环,性能远高于自定义遍历逻辑

输出结果

运行后输出完全匹配预期:

Name  Rank  Months NewIncremental
0     A  'A3'       2             P4
1     A  'A3'       2             P5
2     A  'A2'       3             P1
3     A  'A2'       3             P2
4     A  'A2'       3             P3
5     B  'A1'       4             P1
6     B  'A1'       4             P2
7     B  'A1'       4             P3
8     B  'A1'       4             P4
9     C  'A3'       2             P2
10    C  'A3'       2             P3
11    C  'A2'       1             P1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:48:00