如何在panda中创建根据title值自动重置计数的递增序号新列
Pandas 实现连续同值分组自增计数方法
针对你提出的连续同值计数需求,可直接用以下代码实现,无需额外循环遍历:
import pandas as pd # 替换为你实际的原始数据加载逻辑 original_df = pd.DataFrame({ "title": ["music", "music", "theatre", "theatre", "theatre"] }) # 核心逻辑:生成按连续title分段的自增order列 original_df["order"] = original_df.groupby( original_df["title"].ne(original_df["title"].shift()).cumsum() ).cumcount() + 1
实现逻辑拆解
- 逐行对比:通过
title.shift()获取上一行的title值,用.ne()判断当前行与上一行值是否不同,输出布尔型序列 - 生成连续块分组标记:对上述布尔序列做累计求和
cumsum(),每遇到一次title值变化,累计值就+1,天然将连续相同的title划分为同一个独立分组 - 组内计数:对每个独立分组调用
cumcount()生成从0开始的行内序号,最后加1即可得到从1起始的计数结果
常见踩坑提醒
不要直接使用original_df.groupby("title").cumcount() + 1的写法,这种逻辑是全局同值统一计数:如果后续数据顺序为「music → theatre → music」,第二段music的计数会直接接续之前music的累计序号,完全不符合「title值和上一行不同就从1重新开始计数」的规则。
执行上述代码得到的输出与你期望的效果完全匹配:
title order 0 music 1 1 music 2 2 theatre 1 3 theatre 2 4 theatre 3
内容的提问来源于stack exchange,提问作者hanna
相关产品推荐
相关产品推荐

