如何判断列数据中是否存在连续5个及以上负数并统计出现次数
统计连续5个及以上负数出现次数的解决方案
Excel 方案
适用场景:Excel/WPS表格处理数据,无需嵌套IF,单公式即可输出结果。
假设你的目标数据存放在A列的A1:A16区域(可根据实际数据范围修改):
- 如果你使用Excel 365/2021、最新版WPS,直接输入以下公式即可:
=SUM(--(FREQUENCY(IF(A1:A16<0,ROW(A1:A16)),IF(A1:A16>=0,ROW(A1:A16)))>=5)) - 如果你使用旧版Excel,输入公式后按
Ctrl+Shift+Enter触发数组计算即可。
公式说明:
- 首先通过IF筛选出所有负数对应的行号,非负数位置返回逻辑值FALSE
- 用FREQUENCY函数计算每个被非负数分隔开的连续负数区间的长度
- 最后统计长度≥5的区间总数,和你的需求完全匹配,你提供的示例数据运行后返回结果为
1,符合预期。
注意:如果数据范围包含空白单元格,可将公式中的
A1:A16<0替换为AND(A1:A16<>"",A1:A16<0),排除空白的干扰。
Python 方案
适用场景:批量处理大量数据集,使用pandas实现:
import pandas as pd # 导入示例数据,可替换为你自己的数据集 data = [-110, -164, -101, -144, -117, 0, 0, 10, 15, 22, -56, -60, -54, 2, 10, 0] s = pd.Series(data) # 计算连续≥5个负数的区间数量 neg_bool = s < 0 group_key = (s >= 0).cumsum() consecutive_neg_count = neg_bool.groupby(group_key).sum() result = consecutive_neg_count.ge(5).sum() print(result) # 输出结果为1
代码说明:
- 先生成布尔序列标记所有负数的位置
- 用非负数位置的累计求和值作为分组标识,将连续的负数划分到同一分组
- 对每个分组求和得到连续负数的长度,统计长度≥5的分组数即为最终结果。
内容的提问来源于stack exchange,提问作者JohnnyB10
相关产品推荐
相关产品推荐

