Используйте boolean indexing
для фильтрации:
m = df['Value'].eq(1)
s = df['Day'].ne(df['Day'].shift()).cumsum()
df = df[s[m].duplicated() & m]
print (df)
Day Value
5 Mon 1
6 Mon 1
9 Tue 1
Подробности :
Первое создание последовательной серии с Series.shift
и Series.ne
и Series.cumsum
:
print (df['Day'].ne(df['Day'].shift()).cumsum())
1 1
2 1
3 2
4 3
5 3
6 3
7 3
8 4
9 4
Name: Day, dtype: int32
, а затем фильтрация по 1
значениям в Value
:
print (s[m])
2 1
3 2
4 3
5 3
6 3
8 4
9 4
Name: Day, dtype: int32
И получить Series.duplicated
для всех дубликатов помощника Series
с именем s
:
print (s[m].duplicated())
2 False
3 False
4 False
5 True
6 True
8 False
9 True
Name: Day, dtype: bool
Последняя цепочка с побитовым И * &
для маски с таким же размер как оригинал:
print (s[m].duplicated() & m)
1 False
2 False
3 False
4 False
5 True
6 True
7 False
8 False
9 True
dtype: bool