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

如何将DataFrame的ID值重编码为从1开始的连续正整数?

Pandas实现ID值从小到大连续重新编码

你需要将DataFrame中的ID按从小到大的顺序重新编码为从1开始的连续整数,最小的ID对应1,次小对应2,以此类推。以下是两种实用的实现方法:

方法一:手动构建映射字典(直观可控)

这种方式可以清晰看到每个原始ID对应的新编码,适合需要自定义映射规则的场景:

import pandas as pd

# 构造原始DataFrame(如果已有则跳过此步)
data = {
    'ID': [202, 202, 1756, 1756, 1756, 2153, 2153, 3276, 5609, 5609, 5609],
    'stop': [9, 2, 5, 3, 4, 14, 3, 1, 9, 2, 5],
    'x': [20, 23, 5, 7, 3, 121, 122.5, 54, -2, 8, 102],
    'y': [27, 24, 41, 42, 50, 12, 2, 33, 44, 44, -23],
    'z': [4, 13, 73, 72, 73, 6, 6, -12, -32, -32, 16]
}
df = pd.DataFrame(data)

# 1. 提取并排序所有唯一ID
sorted_ids = sorted(df['ID'].unique())
# 2. 建立原始ID到新编码的映射(编码从1开始)
id_map = {old_id: new_id for new_id, old_id in enumerate(sorted_ids, start=1)}
# 3. 替换原ID列
df['ID'] = df['ID'].map(id_map)

print(df)

方法二:使用rank函数(简洁高效)

利用Pandas内置的rank函数,一行代码即可完成编码,适合快速实现需求:

# 直接对ID列进行连续排名编码
df['ID'] = df['ID'].rank(method='dense', ascending=True).astype(int)
  • method='dense':确保编码是连续整数(不会出现跳过的情况)
  • ascending=True:按原始ID从小到大排序编码
  • astype(int):将排名结果转为整数类型

运行后即可得到你需要的目标DataFrame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:05:22