按重叠范围对行进行分组

2024-01-11

我有一个数据框,其中left列是对象最左边的位置,并且right列是最右边的位置。如果对象重叠,或者它们重叠重叠的对象(递归地),我需要对它们进行分组。 因此,例如,如果这是我的数据框:

     left  right
0      0    4
1      5    8
2      10   13
3      3    7
4      12   19      
5      18   23
6      31   35

所以行0 and 3重叠 - 因此它们应该在同一组中,并且也在同一行1是重叠线3- 因此它加入了该组。

因此,对于这个例子,输出应该是这样的:

     left  right    group
0      0    4         0
1      5    8         0
2      10   13        1
3      3    7         0
4      12   19        1
5      18   23        1
6      31   35        2

我想过各种方向,但没有想通(没有丑陋的for)。 任何帮助将不胜感激!


我发现接受的解决方案(更新:现已删除)具有误导性,因为它无法推广到类似的情况。例如对于以下示例:

df = pd.DataFrame({'left': [0,5,10,3,12,13,18,31], 
    'right':[4,8,13,7,19,16,23,35]})
df

建议的聚合函数输出以下数据帧(请注意,18-23 应与 12-19 一起位于组 1 中)。

一种解决方案是使用以下方法(基于组合间隔的方法)由@CentAu 发布 https://stackoverflow.com/questions/15273693/python-union-of-multiple-ranges):

# Union intervals by @CentAu
from sympy import Interval, Union
def union(data):
    """ Union of a list of intervals e.g. [(1,2),(3,4)] """
    intervals = [Interval(begin, end) for (begin, end) in data]
    u = Union(*intervals)
    return [u] if isinstance(u, Interval) \
        else list(u.args)

# Create a list of intervals
df['left_right'] = df[['left', 'right']].apply(list, axis=1)
intervals = union(df.left_right)

# Add a group column
df['group'] = df['left'].apply(lambda x: [g for g,l in enumerate(intervals) if 
l.contains(x)][0])

...输出:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按重叠范围对行进行分组 的相关文章

随机推荐

  • api_platform 产生错误“找不到 uri [/index/_doc/_search] 和方法 [POST] 的处理程序”

    当尝试通过 fos elastica bundle v6 0 0 将 elasticsearch v7 9 3 实现到我的 Symfony v5 3 10 App with api platform v2 6 6 中时 我不断收到此错误 e
  • asp.net mvc参数从页面到局部视图

    我遇到了一个问题 我有一个传递参数的 ajax 链接 但是它打开的页面不需要该参数 该页面仅加载 2 个部分视图 其中一个需要将该参数传递给页面才能正确加载数据 另一个只需要加载表单 因此不需要该参数 我怎样才能做到这一点 为了执行您想要的
  • 使用 Spring MVC 处理 MaxUploadSizeExceededException

    当文件大小超出时 如何拦截并发送文件上传的自定义错误消息 我在控制器类中有一个带注释的异常处理程序 但请求未到达控制器 我在此链接中找到的答案如何处理MaxUploadSizeExceededException https stackove
  • 为什么需要softmax函数?为什么不进行简单的标准化呢?

    我对深度学习不熟悉 所以这可能是一个初学者问题 根据我的理解 多层感知器中的softmax函数负责标准化和分配每个类别的概率 如果是这样 我们为什么不使用简单的标准化呢 假设我们得到一个向量x 10 3 2 1 应用softmax 输出将是
  • Request.IsAjaxRequest 在 POST 上返回 false

    我的问题类似于this one https stackoverflow com questions 1702837 request isajaxrequest returns false我遇到了类似的问题 但一个很大的区别是我使用的是 Aj
  • 如何在Python中控制string.format(bool_value)结果的长度?

    等效的方法是什么str format将布尔值转换为字符串的函数 gt gt gt 5s True True gt gt gt 5s False False 请注意其中的空格 True 这始终使 True 和 False 的长度相同 我已经检
  • 我应该在哪里存储登录数据?

    我正在创建一个小应用程序 让用户输入他的 Google 帐户名称和密码 并向他显示他的 Google 云端硬盘帐户上的可用电子表格 我想让用户能够保存以下数据 正确或错误 是否自动连接到他的帐户 Google 帐户名 电子邮件 Passwo
  • DictReader,无引号,选项卡式文件

    我有一个 csv 文件 如下所示 请注意 没有引号 制表符 t 是分隔符 标题和实际内容之间有一个空行 Facility No Testing No Name Age 252 2351 Jackrabbit Jazz 15 345 257
  • 与 Google 日历 API v3 进行未经授权的交互

    我的情况与this guy https stackoverflow com questions 10112939 login required 401 unauthorized message when calling the v3 goo
  • 获取 Firestore 子集合

    我在从以下位置获取数据时遇到问题火库具有以下结构 这是我获取类别集合的方法 var defaultStore Firestore var location DocumentSnapshot override func viewDidLoad
  • 空手道 - 有没有一种方法可以在字符串正则表达式中使用变量

    空手道 有没有一种方法可以在字符串正则表达式中使用变量 类似于下面的东西 match each productCodes regex i codes 任何替代方案或最佳实践将不胜感激 我试图从响应中获取一个字符串数组 以便每次进行匹配 一次
  • 在“VI”编辑器中对行进行排序

    如果我必须根据 左侧的值对以下行进行排序 但排序应同时将选择范围扩展到 之后的列 这就是我们不必在 之后对列进行排序 50599 1000000 50454 00000054 50080 00005464 50098 00000875 50
  • Ruby on Rails:根据数据库排序规则比较两个字符串

    我有一个单词列表 想查找数据库中已经存在的单词 我决定使用 SELECTword FROM table WHERE wordIN array of words 然后循环结果 问题是数据库排序规则 http www collat ion ch
  • f32 未实现减法?

    编译以下代码时 use std io fn main let reader stdin let nums reader lock lines next unwrap unwrap split whitespace map s s parse
  • CouchDB 全文搜索

    我需要一些有关 couchdb 中全文搜索的指导 它是否已经在 2 0 中默认启用 或者我们是否必须重建 couchdb 才能启用它 设想 它是一个文档管理系统 文档以网格形式显示 我需要能够对结果进行排序 经过从地图减少到弹性索引的几次更
  • Django 中没有 TEMPLATE_CONTEXT_PROCESSORS

    我没有TEMPLATE CONTEXT PROCESSORS在我的默认设置中 TEMPLATE CONTEXT PROCESSORS django contrib auth context processors auth django co
  • “不知道该怎么办”nvcc 致命错误

    我在 Ubuntu 终端中使用命令行 我正在尝试编译 CUDA Compiler Driver NVCC pdf 中提供的三个文件 当我使用这 3 个文件的文档给出的命令行时 我确实收到以下错误 nvcc fatal 不知道如何处理 dc
  • 如何知道站点查询字符串的所有可能参数是什么?

    我想检查任何现有网站网址的所有可能参数是什么 假设该站点正在使用参数类型查询字符串 architecture 例如不是 MVC 如下所示 http www foobar com p1 itemsPerPage 50 size 500 假设还
  • 实模式 BIOS 例程和保护模式

    我正在做一些操作系统实验 到目前为止 我的所有代码都利用实模式 BIOS 中断来操作硬盘和软盘 但是一旦我的代码启用了CPU的保护模式 所有实模式BIOS中断服务程序将不可用 如何读写硬盘和软盘 我现在需要做一些硬件驱动程序吗 我该如何开始
  • 按重叠范围对行进行分组

    我有一个数据框 其中left列是对象最左边的位置 并且right列是最右边的位置 如果对象重叠 或者它们重叠重叠的对象 递归地 我需要对它们进行分组 因此 例如 如果这是我的数据框 left right 0 0 4 1 5 8 2 10 1