Как изменить значения bool в pd.Series, если количество больше некоторого значения в pandas

У меня есть следующий логический ряд, я пытаюсь найти 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

Можете ли вы сократить пример (~ 10 строк было бы идеально), а также предоставить ожидаемый результат, пожалуйста?

cs95 07.04.2019 23:30

@coldspeed вывод правильно объяснен, пожалуйста, прочитайте информацию

id101112 08.04.2019 00:08
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
119
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Попробуйте использовать 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

Другие вопросы по теме