Python 3.7, Pandas 25
У меня есть Pandas Dataframe со столбцами для начальной и конечной даты. Я ищу диапазоны, которые перекрывают диапазон моих переменных. Не вдаваясь в подробности и составляя серию операторов «больше / меньше» с ands / ors, чтобы отфильтровать нужные мне строки, я бы хотел использовать некоторый интервал «перекрытия». Похоже, что Pandas обладает такой функциональностью:
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Interval.overlaps.html
Следующий тест работает:
range1 = pd.Interval(pd.Timestamp('2017-01-01 00:00:00'),pd.Timestamp('2018-01-01 00:00:00'),closed='both')
range2 = pd.Interval(pd.Timestamp('2016-01-01 00:00:00'),pd.Timestamp('2017-01-01 00:00:00'),closed='both')
range1.overlaps(range2)
Однако, когда я иду применить его к столбцам данных, он делаетне. Я не уверен, что в моем синтаксисе что-то не так, или это просто нельзя применить к кадру данных. Вот некоторые из вещей, которые я попробовал (и получил всю гамму ошибок):
start_range = '2017-07-01 00:00:00'
end_current = '2019-07-01 00:00:00'
reporttest_range = pd.Interval(pd.Timestamp(start_range),pd.Timestamp(end_current),closed='both')
reporttest_filter = my_dataframe[my_dataframe['startdate']['enddate'].overlaps(reporttest_range)]
reporttest_filter = my_dataframe[my_dataframe['startdate','enddate'].overlaps(reporttest_range)]
reporttest_filter = my_dataframe[(my_dataframe['startdate','enddate']).overlaps(reporttest_range)]
reporttest_filter = my_dataframe.filter(['startdate','enddate']).overlaps(reporttest_range)
reporttest_filter = my_dataframe.filter['startdate','enddate'].overlaps(reporttest_range)
reporttest_filter = my_dataframe.filter(['startdate','enddate']).overlaps(reporttest_range)
print(reporttest_filter)
Может кто-нибудь указать мне эффективный способ сделать это?
В соответствии с просьбой,Вывод данных кадра выглядит так:
record startdate enddate
0 99 2017-07-01 2018-06-30
1 280 2018-08-01 2021-07-31
2 100 2017-07-01 2018-06-30
3 281 2017-07-01 2018-06-30