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

