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

如何在Pandas分组DataFrame中添加首个按组递增的person索引?

实现按分组生成连续递增的person索引

当然可以实现你的需求!问题的核心是要给每个唯一的id分配一个连续递增的整数编号,而不是给每一行单独编号。下面是两种简单高效的Pandas实现方法:

方法1:使用pd.factorize()

factorize()方法专门用于将分类变量转换为连续的整数标签,正好匹配我们的需求——它会为每个唯一的id分配从0开始的递增编号,且同一id的编号完全一致。

示例代码:

import pandas as pd

# 构造原始数据
data = {
    "id": ["sdfg", "fgjh", "fgjh", "hjsa"],
    "last_name": ["Muller", "Smith", "Smith", "Jackson"],
    "first_name": ["Peter", "Rob", "Robert", "Michael"]
}
df = pd.DataFrame(data)

# 生成person列:对id进行factorize,取返回的标签部分
df["person"] = pd.factorize(df["id"])[0]

# 调整列顺序,把person放到最前面
df = df[["person", "id", "last_name", "first_name"]]

print(df)

输出结果:

person    id last_name first_name
0       0  sdfg    Muller       Peter
1       1  fgjh     Smith         Rob
2       1  fgjh     Smith      Robert
3       2  hjsa    Jackson     Michael

方法2:使用groupby().ngroup()

另一种方法是先按id分组,再用ngroup()为每个分组分配连续的组编号,效果和上面完全一致:

示例代码:

# 生成person列:按id分组后获取组编号
df["person"] = df.groupby("id").ngroup()

# 同样调整列顺序
df = df[["person", "id", "last_name", "first_name"]]

为什么reset_index()不行?

reset_index()是对DataFrame的每一行重新分配索引,不管分组情况,所以会生成全局递增的行号,而不是按唯一id的分组编号,这和你的需求不匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:33:21