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

问题描述

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

[[0,5),[5,10),[15,20),[18,24)]

假设列表已经排序(或者已经来自 pandas.arrays.IntervalArray 对象),我如何生成一个 pandas.arrays.IntervalArray 组成区间的形式为

[[0,24)]

也就是说,reprIntervalArray 应该打印

<IntervalArray>
[[0,24)]
Length: 2,closed: left,dtype: interval[int64]

代替

<IntervalArray>
[[0,24))]
Length: 4,dtype: interval[int64]

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

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)*
  2. 这要求所有区间在两侧都是封闭的:它将分割范围 [0,0),即使它们在联合时是连续的。

我想知道是否有办法使用 pandas 函数(例如 pandas.aggregate)来做到这一点。


我知道 IntervalArray 的两个版本在用作索引或重叠检查时的功能完全相同。但是,最终我想使用两列 IntervalArray 表示间隔的左侧和右侧,将 INTEGER 持久化到数据库中, 并且其子区间是联合的 IntervalArray 将产生更少的对并且需要更少的行。


*我的意思是,如果我真的想沿着单行路径走下去,我可以写:

IntervalArray([*map(lambda ia: Interval(ia.left[0],ia.right[-1],closed=ia.closed),map(IntervalArray,y: not x.overlaps(y))))])

但是在 pandas 中是否有使用工具的等效方法

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)