У меня есть следующий логический ряд, я пытаюсь найти count
, я должен проверить значения False
, если количество значений False
в последовательном ряду равно greater than 2
, то пусть оно будет ложным, но если count is less than equal to 2 then i have to inverse them
, из False to True
Ожидаемый результат: как и в первый раз, False повторяется два раза, что означает, что оно изменится на True, но если мы увидим после истинных значений, что false повторяется снова более двух раз, поэтому эти значения останутся ложными,
Как я могу выполнить это, используя функции Pandas?
True
True
True
True
True
False
False
True
True
True
True
True
True
True
False
False
False
False
False
False
True
True
True
True
@coldspeed вывод правильно объяснен, пожалуйста, прочитайте информацию
Попробуйте использовать groupby
и cumsum
для создания уникальных групп False, затем получите count
каждой группы, если это число меньше трех, инвертируйте эту группу серий, используя ~
, и примените обратно к сериям с mask
:
s.mask(s.groupby((s).cumsum().where(~s)).transform('count') < 3, ~s)
Выход:
0 True
1 True
2 True
3 True
4 True
5 True
6 True
7 True
8 True
9 True
10 True
11 True
12 True
13 True
14 False
15 False
16 False
17 False
18 False
19 False
20 True
21 True
22 True
23 True
Name: 0, dtype: bool
Давайте попробуем что-нибудь другое
s=df.cumsum().mask(df)
df=df.mask(s.isin(s.value_counts()[s.value_counts()<=2].index),True)
df
0 True
1 True
2 True
3 True
4 True
5 True
6 True
7 True
8 True
9 True
10 True
11 True
12 True
13 True
14 False
15 False
16 False
17 False
18 False
19 False
20 True
21 True
22 True
23 True
Name: a, dtype: bool
Можете ли вы сократить пример (~ 10 строк было бы идеально), а также предоставить ожидаемый результат, пожалуйста?