如何统计数据列中特定值组合数?如ID列1下方出现1的次数统计
相邻同值(1在1下方)的统计方法
核心逻辑:严格保留数据集从上到下的原有行顺序,逐行校验——只要当前行的ID值为1,且紧邻的上一行ID值也为1,就计1次,遍历完成后累加的总数就是目标结果。
你提供的样例实际统计结果
样例中的ID列从上到下依次为:[1, 1, 2, 2, 2, 1, 1, 2, 2, 1, 1]
逐对匹配相邻行的符合条件的情况:
- 第2行ID=1,上一行(第1行)ID=1 → 计1次
- 第7行ID=1,上一行(第6行)ID=1 → 计1次
- 第11行ID=1,上一行(第10行)ID=1 → 计1次
最终累计次数为3次。
常用工具的具体实现
- Excel/WPS表格
- 在ID列旁新增辅助列,从第二行数据(紧邻ID列第一行数据的下一行)开始输入公式:
=IF(AND(B2=1,B1=1),1,0)(假设ID值存放在B列) - 将公式批量填充到所有数据行对应的辅助单元格,最后对辅助列做求和,得到的结果就是目标统计值。
- 在ID列旁新增辅助列,从第二行数据(紧邻ID列第一行数据的下一行)开始输入公式:
- Python(pandas库)
先确保数据集没有打乱原有行顺序,直接用移位对比相邻行即可完成统计:
输出的# 假设数据集加载为df,ID对应的列名为"ID" match_result = ((df["ID"] == 1) & (df["ID"].shift(1) == 1)).sum()match_result即为统计的次数。 - SQL
通过窗口函数获取每行的上一行ID值,再做条件计数即可,注意必须按原数据的行顺序排序,避免顺序错乱导致结果错误:SELECT SUM( CASE WHEN ID = 1 AND LAG(ID, 1) OVER(ORDER BY 原始行号字段) = 1 THEN 1 ELSE 0 END ) AS match_count FROM 存储数据集的表名
内容的提问来源于stack exchange,提问作者user15430894
相关产品推荐
相关产品推荐

