如何统计列中连续重复值的频次
使用shift()与ne()构建连续组标识,结合cumsum()生成唯一组ID,再通过groupby().transform('size')对每行标注当前连续段长度,从而按连续块而非全局分组统计重复值频次,该方法适用于日志分析、传感器时序等场景。
本文介绍使用 pandas 按“连续块”(而非全局分组)统计某列中重复值出现次数的方法,核心是通过 shift() + ne() 构建连续组标识,再结合 groupby().transform('size') 实现每行标注当前连续段长度。
这篇文章要讲的,是pandas里一个很实用但容易踩坑的技巧——按“连续块”来统计重复值出现的次数,而不是按全局分组。什么意思呢?比方说,你有一列数据是 [0, 0, 0, 1, 1, 0],如果直接用 value_counts() 或者 groupby().size(),结果会告诉你0出现了4次,1出现了2次。但这里显然有两个不同的0段:前面三个0连在一起,末尾单独一个0。它们本质上是两个独立的“运行段”(run-length encoding),需要分别统计长度。
那么,怎么才能识别出这些连续变化的边界呢?pandas提供了一套非常简洁的向量化方案,核心思路只有四步:
- 用
Series.shift()把原列下移一行,让每一行跟它前面那行对齐; - 用
Series.ne()比较当前值和前一个值是否相等——注意ne()就是!=,返回布尔值; - 对这个布尔序列做
cumsum(),每次遇到值变化,累计和就加1,这样每个连续段就被分配了一个唯一的ID; - 基于这个组ID做
groupby,然后用transform('size')把每组长度广播回原始数据框的每一行。
直接看代码更清楚:
import pandas as pd
# 构造示例数据
df = pd.DataFrame({'Value': [0, 0, 0, 1, 1, 0]})
# 生成连续分组标识,并计算每组大小
df['Freq'] = df.groupby(
df['Value'].ne(df['Value'].shift()).cumsum()
)['Value'].transform('size')
print(df)
运行结果:
Value Freq 0 0 3 1 0 3 2 0 3 3 1 2 4 1 2 5 0 1
注意几个细节:
df['Value'].ne(df['Value'].shift())在首行会因为shift()产生NaN,而NaN != x恒为True,所以第一行天然被当作新组的起点,完全符合预期。- 这个方法是完全向量化的,性能非常优秀,处理百万级数据也不在话下。
- 如果你不仅需要每行的段长度,还想知道每个段的起始位置、具体值等完整信息,可以改用
pd.Series.diff().ne(0).cumsum()配合agg()提取聚合结果。 - 千万注意:不要误用
df.groupby('Value').transform('size'),那统计的是全局重复频次——比如所有0会统计算出4次,完全无法区分连续段。
这个技巧在现实中非常常用:日志分析里统计连续失败次数,传感器时序数据中计算状态持续时长,金融行情里统计连续涨跌天数……凡是需要按“连续块”而不是“全局值”来计数的场景,都可以拿这套方法直接套用,属于pandas高级分组操作里的经典范例。
WPS Office是一款面向macOS用户的综合办公套件,将文字处理、电子表格、演示文稿、PDF工具、模板与云协作整合在同一应用中。它兼容常见Microsoft Office格式,支持Intel及Apple芯片Mac,基础功能可免费使用,
Shapr3D是一款面向工业设计、机械工程、建筑概念和三维打印工作流的CAD软件。Mac版采用Parasolid建模内核,支持草图约束、实体建模、工程图、可视化渲染及常见CAD格式交换,并可通过账户在多台设备之间同步项目。
REAPER是Cockos开发的数字音频工作站,提供多轨音频与MIDI录制、剪辑、处理、混音和母带制作工具。Mac版兼容Intel与Apple芯片,支持AU、VST、VST3、CLAP等插件格式,并提供高度可定制的工作流程。
Adobe Photoshop 是面向摄影师、设计师和内容创作者的专业图像处理工具,可在 Windows 上完成照片修饰、选区抠图、图层合成、文字排版、绘画及生成式编辑。软件采用订阅授权,由 Creative Cloud 管理安装、更新与许
Adobe InDesign 是面向印刷与数字出版的专业页面排版工具,可制作书籍、杂志、宣传册、海报、交互式 PDF 和电子书。它提供精细的文字样式、多页面管理、印前检查及多格式输出能力,并能与 Photoshop、Illustrator
Adobe Illustrator 是用于绘制矢量图形、插画、图标、徽标和版式的专业设计工具。它以路径和锚点为核心,作品放大后仍能保持清晰,并提供画板、文字、渐变、图像描摹及精确变换等功能,适合品牌视觉、印刷物料、数字界面和商业插画创作。













