在pd.Serie中标识连续的True值组

时间:2019-03-05 07:21:06

标签: pandas boolean

我有一个布尔值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与原始大小相同,其中单个TrueFalse替换。

1 个答案:

答案 0 :(得分:1)

首先通过将Series.neSeries.shiftSeries.cumsum进行比较来创建唯一的连续组,然后通过Series.mapSeries.value_countsGroupBy.transform对值进行计数与GroupBy.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