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

Pandas按组从0开始累计计数问题及实现思路

解决Pandas按组从0开始累计计数的问题

嘿,我来帮你搞定这个需求!你想要对DataFrame的group列按组统计每个组内元素出现的次数(从0开始累计),这个需求其实Pandas有专门的函数可以轻松实现,下面一步步来拆解:

问题回顾

你的示例DataFrame:

import pandas as pd
df = pd.DataFrame({'group': list('aaabbabc')})

期望给df新增一列n,每个组内的行从0开始依次计数,最终得到:

group  n
0     a  0
1     a  1
2     a  2
3     b  0
4     b  1
5     a  3
6     b  2
7     c  0

初始代码的问题

你尝试的df['n'] = df.groupby('group').apply(lambda x: list(range(x.shape[0])))之所以不对,是因为groupby.apply返回的是按组索引的结果(比如索引是['a','b','c']),而原DataFrame的索引是0-7,直接赋值会导致索引不匹配,最终得到的n列会是NaN或者错误的嵌套列表。

推荐高效解法:使用cumcount()

Pandas的groupby.cumcount()方法就是专门为这个场景设计的——它会对每个组内的行从0开始顺序计数,完美匹配你的需求:

df['n'] = df.groupby('group').cumcount()

运行这段代码后,df就会得到你期望的结果。这个方法不仅简洁,而且执行效率远高于自定义lambda的方式。

如果你想修改初始代码(用transform替代apply)

如果一定要基于你的初始思路调整,可以用groupby.transform代替apply,因为transform会把组内的计算结果广播回原DataFrame的每一行,保持索引一致:

df['n'] = df.groupby('group').transform(lambda x: list(range(len(x))))

不过还是更推荐cumcount(),因为它是专门的API,可读性和性能都更好。

验证结果

运行推荐的代码后,打印df就能看到和你期望完全一致的输出啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:03:40