【问题标题】:How to check if occurrences of identical consecutive numbers is below a threshold in pandas series如何检查相同连续数字的出现是否低于熊猫系列中的阈值
【发布时间】:2023-02-10 19:54:30
【问题描述】:

我需要检查相同连续数字的出现是否低于某个阈值,例如最多两个相同的连续数字。

pd.Series(data=[-1, -1, 2, -2, 2, -2, 1, 1])  # True
pd.Series(data=[-1, -1, -1, 2, 2, -2, 1, 1])  # False

进一步检查:
仅允许数字 +1-1 作为连续数字出现,最多出现两次。

pd.Series(data=[-1, 1, -2, 2, -2, 2, -1, 1])  # True
pd.Series(data=[1, 1, -2, 2, -2, 2, -1, 1])  # True
pd.Series(data=[-1, -1, 2, 2, -2, 1, 1, -2])  # False
pd.Series(data=[-1, 1, -2, -2, 1, -1, 2, -2]) # False

【问题讨论】:

    标签: python pandas list


    【解决方案1】:

    groupby.sizeany 选项:

    def check(s, N=2):
        return s.groupby(s.ne(s.shift()).cumsum()).size().gt(N).any()
    

    或者使用 rolling 总和:

    def check(s, N=2):
        return s.rolling(N+1).apply(lambda x: x.eq(x.iloc[0]).sum()>N).any()
    
    check(pd.Series(data=[-1, -1, 2, -2, 2, -2, 1, 1]))
    # False
    
    check(pd.Series(data=[-1, -1, -1, 2, 2, -2, 1, 1]))
    # True
    

    【讨论】:

    • 这解决了问题的第一部分。但是我怎样才能区分数字 1 和 2 呢?
    猜你喜欢
    • 2020-12-08
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多