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

如何在Pandas Series中统计连续重复值的出现次数?

解决Pandas Series连续重复值计数问题

这个需求其实很常见,我来给你拆解一下思路,一步步实现你要的效果:

步骤1:构造示例数据

先把你给出的示例Series创建出来,方便后续测试:

import pandas as pd

s = pd.Series([True, False, False, False, True, True, False])

步骤2:识别值的变化点

我们需要标记出当前值和前一个值不同的位置(包括第一个元素,因为它没有前值,默认作为新组的起点):

# 比较当前值与前一个值是否不同,shift()会把第一个元素变成NaN,所以用fillna(True)把第一个位置标记为变化点
change_points = s != s.shift().fillna(True)

这一步得到的change_points结果是:

0     True
1     True
2    False
3    False
4     True
5    False
6     True
dtype: bool

步骤3:生成分组ID

对变化点做累加求和,这样每一段连续相同的值会被分配到同一个分组ID里:

group_ids = change_points.cumsum()

group_ids的结果是:

0    1
1    2
2    2
3    2
4    3
5    3
6    4
dtype: int64

步骤4:逐组计数

最后对每个分组ID使用cumcount()(从0开始计数),再加1就得到从1开始的连续重复次数:

counts = s.groupby(group_ids).cumcount() + 1

最终的counts就是你要的结果:

0    1
1    1
2    2
3    3
4    1
5    2
6    1
dtype: int64

简洁版一行代码

如果想更简洁,可以把步骤合并成一行:

counts = s.groupby((s != s.shift().fillna(True)).cumsum()).cumcount() + 1

这样就完美实现了你需要的效果,每一次值变化时计数都会重置为1,连续相同的值则递增计数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:21:07