Фильтровать фрейм данных в цикле for в течение двух месяцев с увеличением на 1 день

Я пытаюсь отфильтровать фрейм данных по окну 2 месяца. У меня есть датафрейм 4 месяца.

Пример фрейма данных:

Index                 val      Datetime
2017-11-01 14:30:00  536.04 2017-11-01 14:30:00
2017-11-01 15:00:00  533.04 2017-11-01 15:00:00
...                     ...                 ...
2017-12-31 10:00:00  145.02 2017-12-31 10:00:00
2017-12-31 10:30:00  145.92 2017-12-31 10:30:00

Я пробовал это:

df2[df2['Datetime'] < df2['Datetime'].min() + dateutil.relativedelta.relativedelta(months = 2) + Timedelta('%sD' %x)]

выход:

2017-11-01 14:30:00  536.04 2017-11-01 14:30:00
2017-11-01 15:00:00  533.04 2017-11-01 15:00:00
...                     ...                 ...
2017-12-31 10:00:00  145.02 2017-12-31 10:00:00
2017-12-31 10:30:00  145.92 2017-12-31 10:30:00

2017-11-01 14:30:00  536.04 2017-11-01 14:30:00
2017-11-01 15:00:00  533.04 2017-11-01 15:00:00
...                     ...                 ...
2018-01-01 10:00:00  145.62 2018-01-01 10:00:00
2018-01-01 10:30:00  151.50 2018-01-01 10:30:00

Datafame увеличивается на 1 день, но день начала фиксирован.

Я хочу сдвигать фреймворк на 2 месяца с каждым увеличивающимся днем.

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

2017-11-01 14:30:00  536.04 2017-11-01 14:30:00
2017-11-01 15:00:00  533.04 2017-11-01 15:00:00
...                     ...                 ...
2017-12-31 10:00:00  145.02 2017-12-31 10:00:00
2017-12-31 10:30:00  145.92 2017-12-31 10:30:00

2017-11-02 14:30:00  536.04 2017-11-02 14:30:00
2017-11-02 15:00:00  533.04 2017-11-02 15:00:00
...                     ...                 ...
2018-01-01 10:00:00  145.62 2018-01-01 10:00:00
2018-01-01 10:30:00  151.50 2018-01-01 10:30:00

Можете ли вы добавить образец данных с ожидаемым результатом?

jezrael 22.05.2018 09:44

@jezrael, добавил.

Dheeraj 22.05.2018 09:45

@jezrael, что-нибудь возможно?

Dheeraj 22.05.2018 09:58

Не уверен, что понимаю вас.

jezrael 22.05.2018 10:24

Я хочу перебирать фрейм данных и фильтровать данные за 2 месяца каждый раз, когда изменяется дата.

Dheeraj 22.05.2018 10:39

Итак, вывод - это список DataFrames? Какой ожидается результат с образцом df = pd.DataFrame({'a': range(10)}, index=pd.date_range('2017-04-03', periods=10, freq='20D'))? (При необходимости меняйте его.)

jezrael 22.05.2018 10:51

@jezrael, вы можете взглянуть на это? stackoverflow.com/questions/50985139/…

Dheeraj 22.06.2018 11:52

извините, я в отпуске, так что только по телефону.

jezrael 22.06.2018 15: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
8
31
1

Ответы 1

Если я правильно понимаю, он должен использовать фильтр с областью действия (при необходимости замените дни '12' переменными):

import dateutil
from datetime import datetime,date,timedelta  
df2[(df2['Datetime'] > df2['Datetime'].min() + timedelta(days=12))  & (df2['Datetime']  < df2['Datetime'].min() + timedelta(days=2) + dateutil.relativedelta.relativedelta(months=2))]

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