如何根据重叠间隔识别唯一行 (ID)?

how to identify unique rows (id) based on overlapping intervals?

提问人:Tarak Pandya 提问时间:11/7/2023 更新时间:11/7/2023 访问量:40

问:

下面的数据集是我的数据集,并希望使用重叠函数获得预期输出(如下所示):

输入数据集:

values_1 同上 DeptId Start_DateTime End_DateTime
PNM(PNM) 4579 FHDU学院 2023-09-04 14:15:29 2023-09-04 18:25:22
PNM(PNM) 1278 FHDU学院 2023-09-04 14:45:28 2023-09-04 18:35:19
POH的 8579 ASKG公司 2023-09-04 15:35:29 2023-09-04 17:25:22
POH的 3449 ASKG公司 2023-09-04 15:45:28 2023-09-04 18:35:19
WEH公司 9124 ASKG公司 2023-09-04 17:25:28 2023-09-04 19:43:13
WEH公司 4579 ASKG公司 2023-09-04 16:15:21 2023-09-04 18:24:02

预期输出:

values_1 同上 DeptId Start_DateTime End_DateTime
PNM(PNM) 4579 FHDU学院 2023-09-04 14:15:29 2023-09-04 18:25:22
WEH公司 4579 ASKG公司 2023-09-04 16:15:21 2023-09-04 18:24:02

对于下面的这段代码,我们知道它提供了 2 个间隔(Start_DateTime 和 End_DateTime)的重叠,但我的问题是:如何将“Id”列合并到下面的函数中,以便输出显示与预期输出相同:

感谢您抽出宝贵时间接受采访,并提前感谢您的帮助!

        from itertools import combinations
    
    
    def find_overlaps(g):
        idx = pd.IntervalIndex.from_arrays(
            g["Start_DateTime"], g["End_DateTime"], closed="both"
        )
    
        to_keep = set()
        for (i1, interval1), (i2, interval2) in combinations(zip(g.index, idx.values), 2):
            if interval1.overlaps(interval2):
                to_keep.add(i1)
                to_keep.add(i2)
    
        return g.loc[list(to_keep)]
    
    
    df["Start DateTime"] = pd.to_datetime(df["Start_DateTime"])
    df["End DateTime"] = pd.to_datetime(df["End_DateTime"])
    
    out = df.groupby("values_1", group_keys=False).apply(find_overlaps)
    print(out)

再次感谢!

python pandas 重叠 匹配

评论

2赞 Corralien 11/7/2023
df.groupby("Id", group_keys=False).apply(find_overlaps)?

答: 暂无答案