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

如何在Pandas中创建仅当Key跨序列重复时递增的索引?

解决方案

首先构造示例数据:

import pandas as pd

data = {
    'Key': ['A', 'A', 'B', 'B', 'C', 'A', 'A', 'A', 'B', 'A'],
    'Value': [10, 20, 30, 40, 50, 60, 70, 70, 80, 90]
}
df = pd.DataFrame(data)

要实现你需要的索引,核心是先识别连续相同Key组成的块,再对每个Key的不同块进行序号递增:

  1. 生成块标识:标记每个连续相同Key的分组块
# 当当前行Key和上一行不同时,标记为新块,用cumsum生成块编号
df['block'] = df['Key'].ne(df['Key'].shift()).cumsum()
  1. 对每个Key的块进行稠密排序,得到目标索引
# 按Key分组,对每个组内的block进行稠密排名,得到每个块的递增序号
df['Index'] = df.groupby('Key')['block'].rank(method='dense').astype(int)

最后可删除临时的block列:

df = df.drop('block', axis=1)

执行后得到的结果与你期望的完全一致:

Key  Value  Index
0   A     10      1
1   A     20      1
2   B     30      1
3   B     40      1
4   C     50      1
5   A     60      2
6   A     70      2
7   A     70      2
8   B     80      2
9   A     90      3

为什么groupby('Key').cumcount()+1不行?因为这个方法是对每个Key的所有行连续计数,而不是按「连续相同Key的块」来区分计数,所以无法满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:22:52