Python 将一系列间隔与自身进行比较
为了一系列 我想检查每一个间隔对,比如一个,是否重叠。因为这提供了方法 结果应该是一系列长度Python 将一系列间隔与自身进行比较,python,pandas,series,Python,Pandas,Series,为了一系列 我想检查每一个间隔对,比如一个,是否重叠。因为这提供了方法 结果应该是一系列长度l的矩阵/数据帧,包含对是否重叠。例如: +--------------------------+--------------------------+--------------------------+--------------------------+ | | [2020-01-01, 2020-01-05] | [2020-01-01, 2020
l
的矩阵/数据帧,包含对是否重叠。例如:
+--------------------------+--------------------------+--------------------------+--------------------------+
| | [2020-01-01, 2020-01-05] | [2020-01-01, 2020-01-02] | [2020-01-04, 2020-01-05] |
+--------------------------+--------------------------+--------------------------+--------------------------+
| [2020-01-01, 2020-01-05] | True | True | True |
+--------------------------+--------------------------+--------------------------+--------------------------+
| [2020-01-01, 2020-01-02] | True | True | False |
+--------------------------+--------------------------+--------------------------+--------------------------+
| [2020-01-04, 2020-01-05] | True | False | False |
+--------------------------+--------------------------+--------------------------+--------------------------+
+--------------------------+--------------------------+--------------------------+--------------------------+
| | [2020-01-01, 2020-01-05] | [2020-01-01, 2020-01-02] | [2020-01-04, 2020-01-05] |
+--------------------------+--------------------------+--------------------------+--------------------------+
|[2020-01-012020-01-05]|对|对|对|
+--------------------------+--------------------------+--------------------------+--------------------------+
|[2020-01-012020-01-02]|真|真|假|
+--------------------------+--------------------------+--------------------------+--------------------------+
|[2020-01-042020-01-05]|真|假|假|
+--------------------------+--------------------------+--------------------------+--------------------------+
因为这个系列相当大,我正在寻找一种比它更高效的方法 您可以使用,以便能够轻松获得右侧
和左侧
边界,并使用numpy和更大的
和
您似乎还可以在IntervalIndex上使用,并执行以下操作:
np.stack([idx.overlaps(interval) for interval in idx])
#or for dataframe
pd.DataFrame([idx.overlaps(interval) for interval in idx],
index=s.values, columns=s.values)
import numpy as np
#work with IntervalIndex
idx = pd.IntervalIndex(s)
#get right and left bounds
right = idx.right
left = idx.left
#create the boolean of True and False
arr = np.greater_equal.outer(right, left) & np.less_equal.outer(left, right)
#create the dataframe if needed
print (pd.DataFrame(arr, index=s.values, columns=s.values))
[2020-01-01, 2020-01-05] [2020-01-01, 2020-01-02] \
[2020-01-01, 2020-01-05] True True
[2020-01-01, 2020-01-02] True True
[2020-01-04, 2020-01-05] True False
[2020-01-04, 2020-01-05]
[2020-01-01, 2020-01-05] True
[2020-01-01, 2020-01-02] False
[2020-01-04, 2020-01-05] True
np.stack([idx.overlaps(interval) for interval in idx])
#or for dataframe
pd.DataFrame([idx.overlaps(interval) for interval in idx],
index=s.values, columns=s.values)