首页 > 解决方案 > 当我有一个开始和结束的熊猫数据框时,需要弄清楚重叠

问题描述

示例:熊猫数据框是,

   start end
0. 10    20
1. 30    40
2. 50    60
3. 25    35
4. 70    80

需要创建一个列表,

ovrlap = [false, true, false, true, false]

由于 idx 1 和 3 重叠,因此列表中的 2 个 idx 也是如此。

标签: pythonpandasalgorithmdataframe

解决方案


我正在使用这段代码:

def overlapDetect(arr):
    res = [False for i in range(len(arr))]
    arr_srt = sorted(arr, key=lambda l:l[0])
    for i in range(len(arr_srt) - 1):
        cur_s, cur_e = arr_srt[i]
        nxt_s, nxt_e = arr_srt[i+1]
        if nxt_s <= cur_e <= nxt_e:
            cur_idx = arr.index(arr_srt[i])
            nxt_idx = arr.index(arr_srt[i+1])
            res[cur_idx] = res[nxt_idx] = True
    return res

arr = [[10, 20], [30, 40], [50, 60], [25, 35]]
print(overlapDetect(arr))

但这需要很长时间,100,000 的 arr 长度需要 10 分钟。

寻找更好的解决方案。


推荐阅读