首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何创建pandas.Interval对象的联合

如何创建pandas.Interval对象的联合
EN

Stack Overflow用户
提问于 2021-01-23 12:17:35
回答 1查看 516关注 0票数 1

假设我有以下范围列表,所有这些范围都关闭在同一侧,存储为pandas.Interval对象

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[[0, 5), [5, 10), [15, 20), [18, 24)]

假设列表已经排序(或已经来自pandas.arrays.IntervalArray对象),如何生成组成间隔为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[[0, 10), [15, 24)]

也就是说,repr of IntervalArray应该打印

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<IntervalArray>
[[0, 10), [15, 24)]
Length: 2, closed: left, dtype: interval[int64]

而不是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<IntervalArray>
[[0, 5), [5, 10), [15, 20), [18, 24))]
Length: 4, closed: left, dtype: interval[int64]

当然,我可以手动比较每个间隔,然后创建新的Interval对象。目前我正在使用more_itertools.split_when

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
intervals: List[Interval]

# Split `intervals` into groups whenever a pair of Intervals are disjoint
>>> map(IntervalArray, split_when(intervals, lambda x, y: not x.overlaps(y)))

这种方法的注意事项如下:

  1. 这将创建一个IntervalArray列表,而不是一个IntervalArray列表(不幸的是,您不能直接从IntervalArray的列表创建一个IntervalArray)*
  2. 这就要求两边的所有间隔都要关闭:它将分割范围[0, 5), [5, 0),即使它们在联合时是连续的。

我想知道是否有使用pandas函数(如pandas.aggregate )来实现此操作的方法。

我知道,当使用IntervalArray作为索引或用于重叠检查时,这两个版本的功能将完全相同。但是,最后,我希望使用表示间隔的左边和右侧的两个INTEGER列将INTEGER持久化到数据库中,而一个IntervalArray的子间隔被联合起来将产生更少的对,所需的行也要少得多。

*我的意思是,如果我真的想沿着一条条路线走下去,我可以写:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
IntervalArray([*map(lambda ia: Interval(ia.left[0], ia.right[-1], closed=ia.closed), map(IntervalArray, split_when(intervals, lambda x, y: not x.overlaps(y))))])

但是在pandas中是否有类似的方法使用工具?

EN

回答 1

Stack Overflow用户

发布于 2021-10-10 21:44:44

您可以使用一个名为皮索的新python包,它是为熊猫设计的。用pip或conda安装。然后用你的例子

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import piso
piso.register_accessors()  # needed if using piso accessor

intervals = pd.arrays.IntervalArray.from_tuples(
    [(0, 5), (5, 10), (15, 20), (18, 24)],
    closed = "left",
)

result = intervals.piso.union()  # using accessor

# this works too
# result = piso.union(intervals)

结果是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<IntervalArray>
[[0, 10), [15, 24)]
Length: 2, closed: left, dtype: interval[int64]

Piso还将与其他设置操作一起工作,如交叉、差异和其他操作。它也支持pandas.Timestamppandas.Timedelta值的间隔。

注意到:我是piso的创建者。如果您有任何反馈或问题,请随时与您联系。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65863958

复制
相关文章
如何创建对象以及jQuery中创建对象的方式(推荐)
在实际使用当中,字面量创建对象虽然很有用,但是它并不能满足我们的所有需求,我们希望能够能够和其他后台语言一样创建一个类,然后声明类的实例就能够多次使用,而不用每次使用的时候都要重新创建它,于是,便有了工厂模式的出现。
晓歌
2018/08/15
5.1K0
如何创建对象以及jQuery中创建对象的方式(推荐)
如何用Map对象创建Set对象
Java中的Map和Set有不少相似之处。本文将分享一个把Map类转化成Set类的小技巧。
哲洛不闹
2018/09/19
1.4K0
如何用Map对象创建Set对象
如何用Map对象创建Set对象
Java中的Map和Set有不少相似之处。本文将分享一个把Map类转化成Set类的小技巧。
哲洛不闹
2018/09/19
1.3K0
如何用Map对象创建Set对象
Spring 如何创建 bean 对象?
前文「Spring 如何从 IoC 容器中获取对象?」从整体上分析了如何从 Spring IoC 容器获取一个 bean 对象。该逻辑由 AbstractBeanFactory#doGetBean 方法实现,主要流程如下:
WriteOnRead
2021/03/12
1K0
Spring 如何创建 bean 对象?
如何通过反射创建对象?
方法1:通过类对象调用newInstance()方法,例如:String.class.newInstance() 方法2:通过类对象的getConstructor()或getDeclaredConstructor()方法获得构造器(Constructor)对象并调用其newInstance()方法创建对象,例如:String.class.getConstructor(String.class).newInstance(“Hello”);
唐怀瑟
2018/08/30
1.5K0
对象的创建
new —> 到常量池中检查是否存在一个类的符号引用 —> 如果有,检查这个符号引用代表的类是否已被加载、解析、初始化 —> 没有,则执行类加载过程。
潇洒
2019/07/03
8290
如何正确的创建和销毁 Java 对象?
Java由Sun Microsystems发明并在1995年发布,是世界上使用最广泛的编程语言之一。Java是一个通用编程语言。由于它拥有功能强大的库、运行时、简单的语法、平台无关(Write Once, Run Anywhere - WORA)以及令人敬畏的社区从而吸引了很多的开发者。
Spark学习技巧
2023/03/21
2.4K0
如何正确的创建和销毁 Java 对象?
如何创建一个“纯净”的对象
假设 Object 的原型中有一个自定义的 log 属性,我们用字面量语法定义 obj 对象,那么使用 for-in 遍历方法就会遍历到这个 log 对象,为了只遍历其自身的属性,需要增加一层筛选
JS菌
2019/05/06
1.9K0
如何创建一个“纯净”的对象
控制对象的创建方式(禁止创建栈对象or堆对象)和创建的数量
我们知道,C++将内存划分为三个逻辑区域:堆、栈和静态存储区。既然如此,我称位于它们之中的对象分别为堆对象,栈对象以及静态对象。通常情况下,对象创建在堆上还是在栈上,创建多少个,这都是没有限制的。但是有时会遇到一些特殊需求。
恋喵大鲤鱼
2018/08/03
2K0
如何在js中创建对象
七夕临近了,没有对象的来创建一个吧 使用对象字面量: const o = { name: "zehan", greeting() { return `Hi, 我是${this.name}`; } }; o.greeting(); // "Hi, zehan" 使用构造函数: function Person(name) { this.name = name; } Person.prototype.greeting = function () { return `Hi, 我是
ZEHAN
2020/09/23
7.6K0
【说站】java如何创建对象
当虚拟机遇到new指令时,首先检查该指令的参数能否在常量池中定位为一个类别的符号引用,检查该符号引用代表的类别是否加载、分析和初始化。否则,执行类加载过程。
很酷的站长
2022/11/23
5760
【说站】java如何创建对象
如何正确的创建和销毁 Java 对象
> 作者 : RonTech ,链接: blog.csdn.net/zyhlwzy/article/details/78937421
Java小咖秀
2021/04/28
2.9K0
如何正确的创建和销毁 Java 对象
如何正确的创建和销毁Java对象
blog.csdn.net/zyhlwzy/article/details/78937421
好好学java
2021/04/30
1.4K0
如何正确的创建和销毁Java对象
mysql 联合主键_Mysql 创建联合主键[通俗易懂]
不知道是不是因为mysql(6.0)的版本问题,还是各版本都是这种情况,mysql中创建联合主键,联合主键列名之外不可以用单引号括上,否则出现错误,无法创建,报错是该列在表中不存在。例子代码如下:
全栈程序员站长
2022/07/04
8.4K0
如何正确的创建和销毁 Java 对象?
点击关注公众号,Java干货及时送达 一、介绍 Java由Sun Microsystems发明并在1995年发布,是世界上使用最广泛的编程语言之一。Java是一个通用编程语言。由于它拥有功能强大的库、运行时、简单的语法、平台无关(Write Once, Run Anywhere - WORA)以及令人敬畏的社区从而吸引了很多的开发者。 本系列文章我们我们将会覆盖一些高级的Java概念,我们假设你对Java语言已经有一些基础知识。本系列文章并不是一个完整的参考,而是一个将您的Java技能提升到下一个级别的详
Java技术栈
2022/05/27
1.9K0
如何正确的创建和销毁 Java 对象?
Java虚拟机--对象的建立你的对象如何创建?
你的对象如何创建? Java是一门面向对象的编程语言,在Java程序中,我们做的最多一件事,就是new对象,在程序运行过程中,无时无刻都有对象被创建出来。 在实际开发过程中,有很多行为可以引起对象的创建,最直接最常用的就是使用new关键字来进行创建,这种方式在Java规范中被称为:由执行类实例创建表达式而引起的对象创建。 那么,对于虚拟机来说,对象的创建会经历怎么样的过程呢? 内存分配 上篇文章,笔者阐述了类加载的过程,本篇中我们来谈谈类的实际使用,也就是对象的创建阶段。 在Java程序中,类通常是用new
贾博岩
2018/05/11
1.2K0
HotSpot虚拟机对象如何被创建的?
每个class文件加载到内存到卸载,都是经历过jvm的类的生命周期是加载、连接(验证、准备、解析)、初始化、使用、卸载;
逍遥壮士
2021/03/04
8280
HotSpot虚拟机对象如何被创建的?
【说站】java如何创建对象数组
以上就是java创建对象数组的方法,关键点在于对实例化数组的使用,大家学会后也可以自己动手从创建一个对象数组。
很酷的站长
2022/11/23
2.1K0
【说站】java如何创建对象数组
oracle 主键删除,联合主键的创建
ALTER TABLE TABLENAME DROP PRIMARY_KEY
全栈程序员站长
2022/07/13
3K0
Java对象的创建
虚拟机遇到new指令之后,会根据new指令的参数去常量池中定位类的符号引用,并且检查这个符号引用代表的类,是否已经加载、解析、初始化,如果没有,则需要先执行相应的类加载过程。
趣学程序-shaofeer
2020/05/18
1K0
Java对象的创建

相似问题

从对象创建数组的联合

23

TypeScript -从对象创建联合

12

如何创建对象和基元类型的联合类型?

23

如何从对象键嵌套对象创建映射的联合类型

24

从键的联合创建对象类型

117
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文