Python 如何检查两个数据帧上分组项的间隔重叠?
我有两个数据帧,df1和df2,df1有三列—group、startdate1和enddate1,df2还有三列,group、startdate2和enddate2。我想比较df1中每个组的间隔(startdate1,enddate1)是否与同一组的任何间隔(startdate2,enddate2)重叠 我找到了这个post(),它使用pandas.IntervalIndex.overlaps检查间隔重叠。这与我的问题非常相似,但我正在努力研究如何将groupby用于pandas.IntervalIndex.overlaps(或者我应该使用其他方法)?以下是一些示例数据: df1: 组 起始日期1 结束日期1 A. 2017-07-01 2018-06-30 B 2017-07-01 2018-06-30 A. 2018-07-01 2019-06-30 B 2019-07-01 2020-06-30Python 如何检查两个数据帧上分组项的间隔重叠?,python,pandas,dataframe,overlap,Python,Pandas,Dataframe,Overlap,我有两个数据帧,df1和df2,df1有三列—group、startdate1和enddate1,df2还有三列,group、startdate2和enddate2。我想比较df1中每个组的间隔(startdate1,enddate1)是否与同一组的任何间隔(startdate2,enddate2)重叠 我找到了这个post(),它使用pandas.IntervalIndex.overlaps检查间隔重叠。这与我的问题非常相似,但我正在努力研究如何将groupby用于pandas.Interva
您可以在组内进行笛卡尔连接,在
df1
中查找按日期范围与df2
重叠的记录索引,然后通过检查记录索引是否在该列表中添加标志:
ixs = (df1.reset_index().merge(df2, on=['group'])
.query('(startdate1 < enddate2) & (enddate1 > startdate2)'))['index']
df1.assign(flag=df1.index.isin(ixs).astype(int))
另外,我假设所有的日期都已经是
datetime
格式,否则我们需要pd.\u datetime(…)
首先是那些列@ShubhamSharma一个很好的观点!更新
group startdate1 enddate1 flag
0 A 2017-07-01 2018-06-30 1
1 B 2017-07-01 2018-06-30 1
2 A 2018-07-01 2019-06-30 0
3 B 2019-07-01 2020-06-30 0