python - 当我有一个开始和结束的熊猫数据框时,需要弄清楚重叠
问题描述
示例:熊猫数据框是,
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 也是如此。
我尝试了 2 个 for 循环,但这需要很长时间。寻找快速算法。
这不像合并重叠,因为它不保持原始列表的顺序,对列表进行排序。
解决方案
我正在使用这段代码:
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 分钟。
寻找更好的解决方案。
推荐阅读
- python - 导入 sklearn 并在 QThread 中运行时,在 C++ 中嵌入 Python 会冻结
- javascript - 使用 AJAX 和 PHP 更新 Quill JS 中的文本
- python - Python中方法调用之前或期间声明的变量之间的区别
- swift - 快速编辑 TableView 单元格中的 TextView
- python - conda 更新 anaconda 失败 | ClobberError
- swift - 将秒转换为分钟:MacOS 标签中的秒
- c# - C# - 通过反射从抽象类中的类变量调用函数
- javascript - 在for循环javascript之前或之中计算.length
- swift - 转到其他视图时 AVPlayer 音乐停止
- javascript - Javascript中的隐式转换