问题描述
假设我有以下范围列表,所有范围都关闭在同一侧,存储为 pandas.Interval
对象
[[0,5),[5,10),[15,20),[18,24)]
假设列表已经排序(或者已经来自 pandas.arrays.IntervalArray
对象),我如何生成一个 pandas.arrays.IntervalArray
组成区间的形式为
[[0,24)]
也就是说,repr
的 IntervalArray
应该打印
<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)))
此方法的注意事项是:
- 这将创建一个
IntervalArray
列表而不是单个(不幸的是,您不能直接从IntervalArray
列表创建一个IntervalArray
)* - 这要求所有区间在两侧都是封闭的:它将分割范围
[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 (将#修改为@)