我的数据框中有两个日期类型的列:开始时间和结束时间(yyyy-mm-dd)。
这是我的数据框:
import pandas as pd
import datetime
data=[["2016-10-17","2017-03-08"],["2014-08-17","2016-09-08"],["2014-01-01","2015-01-01"],["2017-12-20","2019-01-01"]]
df=pd.DataFrame(data,columns=['start','end'])
df['start'] = pd.to_datetime(df['start'], format='%Y-%m-%d')
df['end'] = pd.to_datetime(df['end'], format='%Y-%m-%d')
start end
0 2016-10-17 2017-03-08
1 2014-08-17 2016-09-08
2 2014-01-01 2015-01-01
3 2017-12-20 2019-01-01
我有以下参考开始日期和结束日期。
ref_start=datetime.date(2015, 9, 20)
ref_end=datetime.date(2017,1,31)
print(ref_start,ref_end)
2015-09-20 2017-01-31
如果一行的开始和结束日期范围与参考开始和结束日期重叠,则我想要对该行进行子集操作。由于开始和结束日期范围与参考日期范围(2015-09-20 ~ 2017-01-31)不重叠,因此第三行和第四行未被选择。
因此,我希望得到以下结果:
start end
0 2016-10-17 2017-03-08
1 2014-08-17 2016-09-08
为了实现这个目标,我考虑使用以下代码,基于这个参考链接:Python中高效的日期范围重叠计算?
df[(max(df['start'],ref_start)>min(df['end'],ref_end))]
然而,它并不起作用。有没有更有效的方式来获得所需的结果?