【发布时间】:2019-04-15 10:59:55
【问题描述】:
我很困惑如何使用pandas 最有效地做到这一点。
我有以下熊猫DataFrame,目前包含两列starts和ends,分别代表区间[1, 10]、[5, 15]和[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]和[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) 存储间隔以供以后检索
pandas 是否还配备了这项操作?
【问题讨论】:
-
我没有得到
total列的逻辑 -
@U9-Forward 我应该更好地命名该列。表示区间数,或
interval列中列表的长度