Проблема:
У меня есть DataFrame с почасовым индексом временной метки и логическим столбцом (маской), содержащим значения TRUE или FALSE. Я хочу определить «окна постоянства», в которых имеется X последовательных значений TRUE (X — заданная длина окна). После определения этих окон я хочу сгруппировать подсчеты по месяцам, чтобы получить ежемесячную статистику. Но я сталкиваюсь с проблемами из-за совпадения нескольких месяцев.
Мой подход:
Я использовал pandas.rolling() для подсчета скользящих окон, а затем фильтрую их с помощью Rolling_result == window_length, который правильно идентифицирует постоянные окна. Однако при группировке по месяцам возникают проблемы из-за совпадения месяцев.
Вот пример моих данных с длиной окна 3 часа:
пример данных
Когда я группирую количество окон по месяцам, в настоящее время я получаю 4 окна для апреля и 2 окна для мая. Однако два окна в мае являются результатом совпадения с апрелем. В идеале я бы хотел, чтобы количество окон составляло 3 для апреля и 3 для мая путем пропорционального разделения перекрывающихся окон:
- Для апреля: 2 (полных) windows) + 0,66 (частичное окно) + 0,33 (частичное
окно) = 3 - Для мая: 1 (полное окно) + 1 (полное окно) + 0,66
(частичное окно) + 0,33 (частичное окно) = 3
Есть ли способ справиться с этими перекрытиями и атрибутировать частичные счетчики пропорционально каждому месяцу без использования циклов for? Есть ли векторизованное решение в Pandas или другой подход, позволяющий достичь этой цели?
Заранее благодарим за помощь!
Подробнее здесь: https://stackoverflow.com/questions/791 ... g-overlaps