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

Pandas如何按B/C/D列分组为同组DataFrame行分配整数编号新增列

pandas 多列分组生成连续组编号列实现

需求说明

对包含A、B、C、D四列的DataFrame新增Val列,规则如下:

  • B、C、D三列取值完全相同的行归为同一组
  • 每组分配从1起始的连续整数标识,同组所有行的Val取值一致
  • 最终结果保留原有全部列,仅新增Val列
  • 样例预期:B=X、C=10、D=1a的两行(行1、行4)同组,Val均为1;行2单独成组Val为2;行3单独成组Val为3

实现代码

直接调用pandas内置的groupby().ngroup()方法即可,该方法会按分组首次出现的顺序返回连续整数组编号,默认从0开始计数,要实现从1开始编号直接对结果加1即可:

import pandas as pd

# 构造样例测试数据
df = pd.DataFrame({
    'A': ['AB', 'FH', 'KY', 'DA'],
    'B': ['X', 'Y', 'Z', 'X'],
    'C': [10, 15, 20, 10],
    'D': ['1a', '4h', '6f', '1a']
})

# 生成符合要求的Val列
df['Val'] = df.groupby(['B', 'C', 'D'], sort=False).ngroup() + 1

传入sort=False参数是为了严格按分组在原表中首次出现的顺序分配编号,避免pandas自动对分组键排序打乱编号顺序,和样例预期完全匹配。

运行结果

执行代码后输出的DataFrame如下,完全符合要求:

A  B   C   D  Val
0  AB  X  10  1a    1
1  FH  Y  15  4h    2
2  KY  Z  20  6f    3
3  DA  X  10  1a    1

注意事项

  • 如果需要编号从0起始,直接去掉代码末尾的+ 1即可
  • 该方法生成的编号是连续无跳号的整数,性能远高于手动映射字典的实现,百万级数据量也能快速处理
  • 如果需要自定义组号顺序,可以提前对指定列排序后再执行分组逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:21:55