Python 3.7,
熊猫25
我有一个 Pandas Dataframe,其中包含开始日期和结束日期的列。我正在寻找与我的变量范围重叠的范围。在不冗长并用 and/or 组成一系列大于/小于语句来过滤出我需要的行的情况下,我想使用某种间隔“重叠”。 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