提问人:Tarak Pandya 提问时间:11/7/2023 更新时间:11/7/2023 访问量:40
如何根据重叠间隔识别唯一行 (ID)?
how to identify unique rows (id) based on overlapping intervals?
问:
下面的数据集是我的数据集,并希望使用重叠函数获得预期输出(如下所示):
输入数据集:
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)
再次感谢!
答: 暂无答案
评论
df.groupby("Id", group_keys=False).apply(find_overlaps)
?