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

如何检查Pandas Series中连续相同数字出现是否符合阈值规则

检查Pandas Series是否符合连续重复数字的限制规则

规则说明

  • 仅数字1和-1允许连续重复,且最多连续出现2次
  • 除1、-1外的其他数字,完全不允许连续重复

解决方案代码

import pandas as pd

def check_series_continuous_rules(s: pd.Series) -> bool:
    # 生成连续相同值的分组标签
    group_labels = (s != s.shift()).cumsum()
    # 计算每个元素所在连续分组的长度
    group_lengths = s.groupby(group_labels).transform('count')
    
    # 校验规则:1/-1连续次数不超2,其他数字连续次数不超1
    invalid_cases = ((s.isin([1, -1]) & (group_lengths > 2)) | 
                     (~s.isin([1, -1]) & (group_lengths > 1)))
    
    # 无违规则返回True,否则返回False
    return not invalid_cases.any()

示例验证

符合规则的情况

# 1/-1各连续2次,其他数字无连续重复
s1 = pd.Series(data=[-1, -1, 2, -2, 2, -2, 1, 1])
print(check_series_continuous_rules(s1))  # 输出: True

# 1/-1交替出现,其他数字交替无连续重复
s2 = pd.Series(data=[-1, 1, -2, 2, -2, 2, -1, 1])
print(check_series_continuous_rules(s2))  # 输出: True

# 1连续2次,其他数字交替无连续重复
s3 = pd.Series(data=[1, 1, -2, 2, -2, 2, -1, 1])
print(check_series_continuous_rules(s3))  # 输出: True

违反规则的情况

# -1连续3次,超出允许次数
s4 = pd.Series(data=[-1, -1, -1, 2, 2, -2, 1, 1])
print(check_series_continuous_rules(s4))  # 输出: False

# 数字2连续2次,其他数字不允许连续重复
s5 = pd.Series(data=[-1, -1, 2, 2, -2, 1, 1, -2])
print(check_series_continuous_rules(s5))  # 输出: False

# 数字-2连续2次,违反规则
s6 = pd.Series(data=[-1, 1, -2, -2, 1, -1, 2, -2])
print(check_series_continuous_rules(s6))  # 输出: False

代码逻辑说明

  1. 分组连续值:通过s != s.shift()判断当前值与前一个值是否不同,再用cumsum()生成分组标签,将连续相同的值归为同一组。
  2. 计算连续次数:利用groupby和transform('count'),得到每个元素所在连续分组的长度,即该值连续出现的次数。
  3. 规则校验:分别针对1/-1和其他数字设置连续次数上限,筛选出所有违反规则的元素。
  4. 结果判断:若存在违规元素则返回False,否则返回True。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 08:45:46