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

2024-09-30 01:31:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧,df1和df2,df1有三列—group、startdate1和enddate1,df2还有三列,group、startdate2和enddate2。我想比较df1中每个组的间隔(startdate1,enddate1)是否与同一组的任何间隔(startdate2,enddate2)重叠

我发现了这个帖子(Is it possible to use Pandas Overlap in a Dataframe?),它使用pandas.IntervalIndex.overlaps检查间隔重叠。这与我的问题非常相似,但我正在努力研究如何将groupby用于pandas.IntervalIndex.overlaps(或者我应该使用其他方法)?以下是一些示例数据:

df1:

^{tb1}$

df2:

^{tb2}$

如果同一组的df2有任何间隔重叠,则预期输出是在df1中添加一列1或0。 df_输出:

^{tb3}$

谢谢大家!


Tags: 数据pandas间隔isgroupit帖子df1
1条回答
网友
1楼 · 发布于 2024-09-30 01:31:17

您可以在组内进行笛卡尔连接,查找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))

输出:

  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

另外,我假设所有日期都已经是datetime格式,否则我们需要先pd.to_datetime(...)这些列

相关问题 更多 >

    热门问题