У меня есть логический столбец во фрейме данных. В моем случае n равно 4, поэтому, если True появляется менее 4 раз подряд, я хочу установить для этого значения True значение False. Это можно сделать с помощью следующего кода:
example_data = [False,False,False,False,True,True,False,False,True,False,False,
False,True,True,True,False,False,False,True,True,True,True,
True,False]
import pandas as pd
df = pd.DataFrame(example_data,columns=["input"])
# At the beginning the output is equal to the input.
df["output"] = df["input"]
# This counter will count how often a True apeard in a row.
true_count = 0
# The smalest number of True's that have to appear in a row to keep them.
n = 4
for index, row in df.iterrows():
# If the current value is True the true_counter is increased.
if row["input"] == True:
true_count += 1
# If the value is false and the previous value was false as well nothing.
# will happen.
elif true_count == 0:
pass
# If the true_count is smaler than n starting from the previous input
# the number of previous True's are set to false depending on the
# true_count. After that the true_count is reset to 0.
elif true_count < n:
for i in range(0,true_count):
df._set_value(index-(i+1),"output",False)
true_count = 0
# In case the true_count is bigger n or greater it is simply reset to 0.
else:
true_count = 0
Фрейм данных будет выглядеть примерно так:
input output
0 False False
1 False False
2 False False
3 False False
4 True False
5 True False
6 False False
7 False False
8 True False
9 False False
10 False False
11 False False
12 True False
13 True False
14 True False
15 False False
16 False False
17 False False
18 True True
19 True True
20 True True
21 True True
22 True True
23 False False
Мой вопрос в том, есть ли более "pandas" способ сделайте это, так как итерация данных выполняется довольно медленно. Я подумал о некоторых функциях, которые используют заданные последовательности, например, False, True, True, True, False
, для их замены, но я не нашел ничего подобного.
Заранее спасибо за полезный ответ.