如何检查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
代码逻辑说明
- 分组连续值:通过
s != s.shift()判断当前值与前一个值是否不同,再用cumsum()生成分组标签,将连续相同的值归为同一组。 - 计算连续次数:利用
groupby和transform('count'),得到每个元素所在连续分组的长度,即该值连续出现的次数。 - 规则校验:分别针对
1/-1和其他数字设置连续次数上限,筛选出所有违反规则的元素。 - 结果判断:若存在违规元素则返回
False,否则返回True。
内容的提问来源于stack exchange,提问作者Andi
相关产品推荐
相关产品推荐

