Как посчитать строки, удовлетворяющие определенным условиям, по крайней мере для 2 строк из последних 7 строк?

#python #pandas

Вопрос:

У меня есть фрейм данных, в котором я пытаюсь написать скользящую функцию, в которой она проверяет «закрыть» для 7 последовательных строк, если все они «зависают» вокруг «середины», за неимением лучшего термина.

Для визуальной справки, похоже, что эти подсвечники «парят вокруг этой средней желтой линии в белом поле ниже. Значения закрытия свечей составляют «близко», в то время как значения средней желтой линии составляют «середину».

введите описание изображения здесь

Ожидаемый результат

Ожидаемый результат

Первая часть: Как я намереваюсь определить «зависание», состоит в том, что есть по крайней мере 2 из 7 строк, где «закрыть» больше, чем «середина», а также по крайней мере 2 из 7 строк, где «закрыть» меньше, чем «середина».

Мой фрейм данных состоит из сотен строк, каждая строка изображает минимум.

Я использую базовый numpy, чтобы убедиться, что все «закрыть» находятся ниже «верхнего» (изображено верхней желтой линией), но я не знаю, как выполнить сценарий «отсчет из 7 строк».

 def function1(df): #past 7 candles cannot close above upper line no_upper_breach = np.where((df.close.shift(7) lt; df.upper.shift(7)) amp; (df.close.shift(6) lt; df.upper.shift(6)) amp;  (df.close.shift(5) lt; df.upper.shift(5)) amp; (df.close.shift(4) lt; df.upper.shift(4)) amp;  (df.close.shift(3) lt; df.upper.shift(3)) amp; (df.close.shift(2) lt; df.upper.shift(2)) amp;  (df.close.shift(1) lt; df.upper.shift(1)), True, False) #past 7 candles as least 2 of the past 7 candles must be under middle line two_below_middle = ?? #past 7 candles as least 2 of the past 7 candles must be above middle line two_above_middle = ?? df['function1'] = no_upper_breach amp; two_below_middle amp; two_above_middle #convert TRUE/FALSE into simple one or zero df['function1'] = df['function1'].astype(int) return df  

Second part: How do I have a new column ‘function1’ added to the dataframe and show either 1 or 0? 1 being all 3 conditions are true.

Это строка из приведенного выше кода, в которой я пытаюсь получить show True, если все 3 условия являются истинными, в противном случае-ложными.

 df['function1'] = no_upper_breach amp; two_below_middle amp; two_above_middle  

Пожалуйста, посоветуйте!