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

为Pandas分组中的连续元素添加计数后缀

为Pandas DataFrame的连续Category组添加计数后缀

问题背景

已有包含category类型group列的DataFrame,需要为每组内连续出现的元素添加计数后缀,生成group_element_count列(非连续的同组元素需重新开始计数)。

示例数据初始化

import pandas as pd

# 初始化数据,group为Categorical类型
df = pd.DataFrame({
    'group': pd.Categorical(['A', 'A', 'B', 'B', 'B', 'A', 'A', 'A']),
    'value': [10, 20, 30, 40, 50, 60, 70, 80]
})

期望输出

最终DataFrame需包含group_element_count列,效果如下:

groupvaluegroup_element_count
A10A_1
A20A_2
B30B_1
B40B_2
B50B_3
A60A_1
A70A_2
A80A_3

解决方案代码

# 1. 生成连续分组的唯一标识:标记每一段连续相同的group
df['block_id'] = df['group'].ne(df['group'].shift()).cumsum()

# 2. 对每个连续分组内的元素计数,并拼接成目标列
df['group_element_count'] = (
    df['group'].astype(str) + '_' + 
    df.groupby('block_id').cumcount().add(1).astype(str)
)

# 可选:删除中间辅助列block_id
df = df.drop('block_id', axis=1)

代码解释

  • 连续分组标识:df['group'].ne(df['group'].shift())判断当前行与上一行的group是否不同,返回布尔值;.cumsum()将布尔值累加,生成唯一的block_id,每一段连续相同的group对应同一个block_id。
  • 组内计数:groupby('block_id').cumcount().add(1)在每个连续分组内从1开始计数(cumcount()默认从0开始,加1后符合日常计数习惯)。
  • 拼接列:将category类型的group转为字符串后,与计数拼接得到目标列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 23:25:05