如何为DataFrame指定列的取值范围分配有序序号
Pandas DataFrame 按列值映射连续序号解决方案
场景说明
现有DataFrame某列取值为139~150的整数,存在重复值,需要将列值映射为有序序号,规则为139→0、140→1...,如果需要150对应10调整减数即可。
方案1:直接数值计算(推荐,适合当前连续值场景)
直接用列值减去起始值139即可得到对应序号,性能最优:
import pandas as pd # df为你的DataFrame,col为待映射的列名,new_col为生成的序号列名 df['new_col'] = df['col'] - 139
如果需要150对应10,将上方的139替换为140即可。
方案2:通用场景(非连续值也可使用)
如果列值不连续,只需要按从小到大的顺序分配唯一序号,可以用pd.factorize实现:
# 按列值升序分配序号,相同值序号一致 df['new_col'] = pd.factorize(df['col'].sort_values())[0]
效果验证
用测试数据运行效果如下:
# 构造测试数据 df = pd.DataFrame({'col': [139,140,139,145,150,142]}) df['new_col'] = df['col'] - 139 print(df)
输出结果:
col new_col 0 139 0 1 140 1 2 139 0 3 145 6 4 150 11 5 142 3
内容的提问来源于stack exchange,提问作者Nikita Budilovskiy
相关产品推荐
相关产品推荐

