Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何检查两个数据帧上分组项的间隔重叠?_Python_Pandas_Dataframe_Overlap - Fatal编程技术网

Python 如何检查两个数据帧上分组项的间隔重叠?

Python 如何检查两个数据帧上分组项的间隔重叠?,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,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-30
您可以在组内进行笛卡尔连接,在
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