我很困惑如何最有效地做到这一点pandas
.
我有以下熊猫DataFrame
,当前包含两列starts
and ends
, 代表区间[1, 10]
, [5, 15]
, and [3, 8]
.
import pandas as pd
dict1 = {'start': [1, 5, 3], 'end': [10, 15, 8]}
df = pd.DataFrame(dict1)
print(df)
start end
0 1 10
1 5 15
2 3 8
从 0 开始,我想计算间隔如何重叠。这是正确的合并结构(不必过多担心闭/开区间):
间隔[0, 1]
没有间隔,[1,3]
有 1 个间隔(从[1, 10]
), [3, 5]
有两个区间(一对[1, 10]
and [3, 8]
), 间隔[5, 8]
有三个区间 ([1, 10], [3, 8], [5, 15]
), [8, 10]
有两个区间 ([1, 10], [5, 15]
), 等等。
以表格形式总结结果,预期结果是:
start end total interval
0 0 1 0 []
1 1 3 1 [[1, 10]]
2 3 5 2 [[1, 10], [3, 8]]
3 5 8 3 [[1, 10], [3, 8], [5, 15]]
4 8 10 2 [[1, 10], [5, 15]]
5 10 15 1 [[5, 15]]
6 15 75 0 []
从而该列intervals
当前是包含每个间隔列表的列表的列表。 (我加入了一个大于 15 的整数,以表明那里什么都没有;75 是任意的)
我应该如何用 pandas 完成上述任务?这三个步骤似乎是:
(1) 将区间解构为给定任何其他区间的并集的部分
(2)统计重叠间隔
(3) 存储间隔以供以后检索
Is pandas
甚至为这次行动做好了准备?