【问题标题】:Pandas: collapse overlapping intervals [start-end] and keep the smallerPandas:折叠重叠间隔 [start-end] 并保持较小的
【发布时间】:2020-01-31 12:20:29
【问题描述】:

我有一个由 2 个数字坐标“开始”和“结束”定义的区间的 Pandas 数据框。

我正在尝试折叠所有重叠的间隔,并保留内部坐标。

index start end  
0 10 40  
1 13 34  
2 50 100  
3 44 94  

输出:具有折叠间隔和内部坐标的相同 Pandas 数据框。如果两个区间共享一个公共点(包括闭合端点),则它们会重叠。只有一个共同开放端点的区间不重叠。

例如行索引 = [0,1] 的区间是重叠的。我想将这两个区间折叠成一个新区间,它有 new_start == max([10, 13]) 和 new_end == min([40,34])。行索引 [0,1] 的折叠间隔将具有 new_start = 13,new_end = 34。

index start end  
0 13 34  
1 50 94

数据框的大小为 2M 行,因此我也在寻找一种有效的方法。

谢谢你, 安德烈亚

【问题讨论】:

  • 当您找到与前一行重叠的行时,还不清楚该怎么做。你保留第一次出现吗?您是否仅在一行完全包含在另一行中时才删除该行,或者是否有任何重叠导致它被删除?为什么10 40 行消散器以及50 94 行是如何出现的?
  • 重叠区间是否连续?

标签: python pandas collapse


【解决方案1】:

可以像下面这样完成

df.groupby(((df.shift()["end"] - df["start"])<0).cumsum()).agg({"start":"min", "end":"max"})

【讨论】:

    猜你喜欢
    • 2019-04-12
    • 2019-12-12
    • 2018-05-29
    • 1970-01-01
    • 2016-04-12
    • 2021-03-12
    • 1970-01-01
    • 2011-02-03
    相关资源
    最近更新 更多