IIUC, используйте DataFrame.groupby
с группером: Series.diff
, .ne(0)
, затем .cumsum
:
df.groupby(df.value.diff().ne(0).cumsum())['value'].transform('size').ge(n)
[out]
2010-01-01 00:00:00 False
2010-01-01 01:00:00 True
2010-01-01 02:00:00 True
2010-01-01 03:00:00 True
2010-01-01 04:00:00 True
2010-01-01 05:00:00 True
2010-01-01 06:00:00 True
2010-01-01 07:00:00 True
2010-01-01 08:00:00 True
2010-01-01 09:00:00 True
2010-01-01 10:00:00 False
2010-01-01 11:00:00 False
2010-01-01 12:00:00 False
2010-01-01 13:00:00 False
2010-01-01 14:00:00 False
2010-01-01 15:00:00 False
2010-01-01 16:00:00 False
2010-01-01 17:00:00 False
2010-01-01 18:00:00 False
2010-01-01 19:00:00 False
2010-01-01 20:00:00 True
2010-01-01 21:00:00 True
2010-01-01 22:00:00 True
2010-01-01 23:00:00 True
2010-01-02 00:00:00 True
Freq: H, Name: value, dtype: bool
Пояснение
Ряды, по которым мы группируем, будут смежными группами равных значений:
s = df.value.diff().ne(0).cumsum()
2010-01-01 00:00:00 1
2010-01-01 01:00:00 2
2010-01-01 02:00:00 2
2010-01-01 03:00:00 2
2010-01-01 04:00:00 2
2010-01-01 05:00:00 2
2010-01-01 06:00:00 2
2010-01-01 07:00:00 2
2010-01-01 08:00:00 2
2010-01-01 09:00:00 2
2010-01-01 10:00:00 3
2010-01-01 11:00:00 4
2010-01-01 12:00:00 5
2010-01-01 13:00:00 6
2010-01-01 14:00:00 7
2010-01-01 15:00:00 8
2010-01-01 16:00:00 8
2010-01-01 17:00:00 9
2010-01-01 18:00:00 10
2010-01-01 19:00:00 11
2010-01-01 20:00:00 12
2010-01-01 21:00:00 12
2010-01-01 22:00:00 12
2010-01-01 23:00:00 12
2010-01-02 00:00:00 12
Freq: H, Name: value, dtype: int32
Когда вы группируете эти «идентификаторы группы», используя transform
, чтобы вернуть объект той же формы, что и исходный DataFrame
, агрегируя в «размер», вы получаете:
s.groupby(s).transform('size')
2010-01-01 00:00:00 1
2010-01-01 01:00:00 9
2010-01-01 02:00:00 9
2010-01-01 03:00:00 9
2010-01-01 04:00:00 9
2010-01-01 05:00:00 9
2010-01-01 06:00:00 9
2010-01-01 07:00:00 9
2010-01-01 08:00:00 9
2010-01-01 09:00:00 9
2010-01-01 10:00:00 1
2010-01-01 11:00:00 1
2010-01-01 12:00:00 1
2010-01-01 13:00:00 1
2010-01-01 14:00:00 1
2010-01-01 15:00:00 2
2010-01-01 16:00:00 2
2010-01-01 17:00:00 1
2010-01-01 18:00:00 1
2010-01-01 19:00:00 1
2010-01-01 20:00:00 5
2010-01-01 21:00:00 5
2010-01-01 22:00:00 5
2010-01-01 23:00:00 5
2010-01-02 00:00:00 5
Freq: H, Name: value, dtype: int64
Отсюда это простоSeries.ge
(>=
) сравнение с вашим значением n