【问题标题】:identify groups consecutive True values in pd.Serie识别 pd.Serie 中连续 True 值的组
【发布时间】:2019-03-05 07:21:06
【问题描述】:

我有一个布尔 pd.Series。

S=pd.Series([True,False,True,True,False])

我需要识别 S 中的块,它们至少是 2 个连续的 True 元素。 如果我这样做了

np.logical_and(S,S.shift(-1))

然后我得到了正确的元素,但每个块都缺少一个元素。 相反,我想得到以下内容

pd.Series([False,False,True,True,False])

所以Series 与原始大小相同,单个True 替换为False

【问题讨论】:

    标签: pandas boolean


    【解决方案1】:

    首先通过将Series.neSeries.shiftSeries.cumsum 进行比较来创建唯一的连续组,然后将Series.mapSeries.value_countsGroupBy.transformGroupBy.size 进行比较:

    b = S.ne(S.shift()).cumsum()
    c = b.map(b.value_counts()) == 2
    

    或者:

    c = b.groupby(b).transform('size') == 2
    

    print (c)
    0    False
    1    False
    2     True
    3     True
    4    False
    dtype: bool
    

    【讨论】:

    • 我已经接受了你的回答。但是我仍然有一个问题:当有超过 2 个连续的 False 值时,你的解决方案也会返回 true
    • @00__00__00 - 然后把> 1改成== 2,我觉得需要2个或更多,抱歉。
    猜你喜欢
    • 2018-11-26
    • 2016-08-26
    • 2011-01-10
    • 2020-05-11
    • 2016-03-19
    • 1970-01-01
    • 2012-07-10
    • 2021-06-05
    相关资源
    最近更新 更多