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

如何判断列数据中是否存在连续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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:24:05