如何在Python中为GENUS与SPECIES列的唯一组合分配唯一值?
为GENUS和SPECIES的唯一组合添加唯一编号列
可以用以下两种简洁的方法实现需求,基于pandas操作:
方法1:使用factorize()生成唯一编号
factorize()能直接对多列组合生成连续的唯一整数标识,适合快速生成ID:
import pandas as pd # 为GENUS和SPECIES的组合创建唯一编号列(编号从1开始) dffossil['SPECIES_UNIQUE_ID'] = pd.factorize(dffossil[['GENUS', 'SPECIES']].apply(tuple, axis=1))[0] + 1
说明:将GENUS和SPECIES两列转为元组后,factorize()会为每个唯一元组分配一个初始从0开始的整数,+1是让编号从1起步,更符合常规使用习惯。
方法2:使用groupby().ngroup()分组编号
如果需要按分组的顺序生成ID,ngroup()是更直观的选择:
# 按GENUS和SPECIES分组后生成唯一编号 dffossil['SPECIES_UNIQUE_ID'] = dffossil.groupby(['GENUS', 'SPECIES']).ngroup() + 1
说明:groupby()会先将相同GENUS+SPECIES的行归为一组,ngroup()为每个组分配唯一整数ID,同样+1调整起始编号。
注意事项
- 数据中的
None值会被当作有效组合的一部分,比如(None, None)或单独含None的组合都会被分配独立的唯一ID; - 如果你已经基于
drop_duplicates()得到了去重后的DataFrame,直接在该数据上执行上述代码即可,同样能得到每个唯一组合的专属编号。
内容的提问来源于stack exchange,提问作者EnForNP
相关产品推荐
相关产品推荐

