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

如何在Pandas DataFrame中按nodeType分组为subType分配枚举编号

问题:为DataFrame分组内的子类型分配枚举编号

原始DataFrame:

nodeType    subType
Supplier 1              Supplier    Supplier
Supplier 2              Supplier    Supplier
Supplier 3              Supplier    Supplier of another type
System Integrator       System Integrator   System Integrator
Availability Zone 1     Availability Zone   Server
Availability Zone 2     Availability Zone   Warehouse
Availability Zone 3     Availability Zone   Warehouse
Availability Zone 4     Availability Zone   Warehouse

需求:新增一列enumeration,规则为同一nodeType分组内,相同subType对应相同编号,不同subType按出现顺序分配不同编号。

预期结果:

nodeType            subType                    enumeration
Supplier 1                Supplier            Supplier                    0
Supplier 2                Supplier            Supplier                    0
Supplier 3                Supplier            Supplier of another type    1
System Integrator         System Integrator   System Integrator           0
Availability Zone 1       Availability Zone   Server                      0
Availability Zone 2       Availability Zone   Warehouse                   1
Availability Zone 3       Availability Zone   Warehouse                   1
Availability Zone 4       Availability Zone   Warehouse                   1

尝试过的代码(无法得到预期结果):

nodes["enumeration"] = nodes.groupby("nodeType").subType.cumcount()

正确实现方案

使用groupby结合transform和factorize方法,代码如下:

nodes['enumeration'] = nodes.groupby('nodeType')['subType'].transform(lambda x: x.factorize()[0])

说明

  • cumcount()的问题:它会对每个nodeType分组内的每一行按顺序生成递增数字,同一subType的不同行会得到不同编号,不符合需求。
  • factorize()的作用:在每个nodeType分组内,将subType的唯一值按首次出现顺序映射为0、1、2...的整数编码,相同subType会得到相同编号。
  • transform()的作用:将分组内的编码结果映射回原DataFrame的对应行,保证结果维度与原DataFrame一致。

内容的提问来源于stack exchange,提问作者Lorenzo Gutiérrez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 20:05:33