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

如何为Pandas DataFrame中每个Sym分组生成唯一ID列

问题:为Pandas DataFrame的Sym列分配唯一ID时报错

现有如下Pandas DataFrame:

Sym    P    P_2  R
01.01.2020   AAPL   100  115  0.2
01.01.2020   AA     200  205  0.4
01.01.2020   MM     300  290  0.5
02.01.2020   AAPL   101  116  0.3
02.01.2020   AA     201  206  0.2
02.01.2020   MM     298  300  0.5
03.01.2020   AA     200  205  0.3
03.01.2020   MM     300  305  0.2

需要新增ID列,为每个Sym分配唯一ID,期望结果如下:

Sym   ID  P    P_2  R
01.01.2020   AAPL  1   100  115  0.2
01.01.2020   AA    2   200  205  0.4
01.01.2020   MM    3   300  290  0.5
02.01.2020   AAPL  1   101  116  0.3
02.01.2020   AA    2   201  206  0.2
02.01.2020   MM    3   298  300  0.5
03.01.2020   AA    2   200  205  0.3
03.01.2020   MM    3   300  305  0.2

尝试实现时出现错误:Cannot set a DataFrame with multiple columns to the single column ID,求正确实现方法。


解决方法

这个错误的原因是你尝试将多列数据赋值给ID单列,比如误用了返回DataFrame的方法而非Series。以下是几种可靠的实现方式:

方法1:用pd.factorize()快速生成ID

factorize()会为唯一的Sym值生成连续整数ID,返回的第一个元素就是对应ID的Series,直接赋值即可:

import pandas as pd

# 假设你的DataFrame变量名为df
df['ID'] = pd.factorize(df['Sym'])[0] + 1  # +1让ID从1开始,默认从0起始

方法2:利用分类类型的codes属性

先将Sym列转为分类类型,再通过cat.codes获取ID,同样可加1调整起始值:

df['ID'] = df['Sym'].astype('category').cat.codes + 1

方法3:自定义映射字典(按需指定ID顺序)

如果需要手动控制ID的分配顺序,可先创建映射字典,再用map()方法赋值:

# 获取所有唯一Sym值,按出现顺序生成映射
sym_unique = df['Sym'].unique()
id_map = {sym: idx + 1 for idx, sym in enumerate(sym_unique)}

df['ID'] = df['Sym'].map(id_map)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 09:31:13