如何在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
相关产品推荐
相关产品推荐

