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

pandas中基于列组合分配非数值类别型分组ID的实现问题

分组ID生成解决方案

问题原因

  1. 原有代码中groupby指定的列名和实际列名不匹配:原始数据的列名为Col 1、Col 2,代码中写的Col、Col2会导致报错。
  2. ngroup()方法返回的是整数类型,即使通过astype('category')转换为分类类型,其取值依然为数字,不符合非数值类别的需求。

实现代码

你可以将ngroup()生成的数字ID映射为大写字母,再转换为分类类型即可实现需求:

# 按两列组合生成数字分组ID
data['GroupID'] = data.groupby(['Col 1', 'Col 2']).ngroup()
# 将数字ID映射为大写字母,0对应A、1对应B,以此类推
data['GroupID'] = data['GroupID'].apply(lambda x: chr(ord('A') + x)).astype('category')

如果你本身已经提前计算好了Combination列,也可以直接基于该列生成映射:

# 生成组合与字母ID的映射字典
comb_map = {comb: chr(ord('A') + idx) for idx, comb in enumerate(data['Combination'].unique())}
# 映射生成GroupID并转换为分类类型
data['GroupID'] = data['Combination'].map(comb_map).astype('category')

补充说明

如果你的分组数量超过26个,需要更长的字母组合(类似Excel列名AA、AB这类格式),可以替换上面的映射逻辑,适配多字母生成规则即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:24:05