У меня есть датафрейм от панд:
import pandas as pd
raw_data = [{'Date': '1-10-19', 'Price':7, 'Check': 0},
{'Date': '2-10-19','Price':8.5, 'Check': 0},
{'Date': '3-10-19','Price':9, 'Check': 1},
{'Date': '4-10-19','Price':50, 'Check': 1},
{'Date': '5-10-19','Price':80, 'Check': 1},
{'Date': '6-10-19','Price':100, 'Check': 1}]
df = pd.DataFrame(raw_data)
df.set_index('Date')
Вот как это выглядит:
Price Check
Date
1-10-19 7.0 0
2-10-19 8.5 0
3-10-19 9.0 1
4-10-19 50.0 1
5-10-19 80.0 1
6-10-19 100.0 1
Теперь я пытаюсь сделать так, чтобы для каждой строкигде «Проверка» равна 1, я хочу проверить количество строк до той строки, в которой цена была менее 10% от цены этой строки. Например, для 6-й строки, где цена равна 100, я хочу повторитьнад предыдущими строками и считайте количество строк до тех пор, пока цена не станет меньше 10 (10% от 100), что в данном случае будет на 3 строки раньше, чем цена равна 9. Затем нужно сохранить результаты в новом столбце.
Конечный результат будет выглядеть следующим образом:
Price Check Rows_till_small
Date
1-10-19 7.0 0 NaN
2-10-19 8.5 0 NaN
3-10-19 9.0 1 Nan
4-10-19 50.0 1 NaN
5-10-19 80.0 1 4
6-10-19 100.0 1 3
Я много думал о том, как я мог бы сделать это, используя какую-то функцию Роллинга, но я не думаю, что это возможно. Я также думал об итерациях по всему DataFrame с использованием iterrows или itertuple, но я не могу представить себе способ сделать это без крайней неэффективности.