Pandas 另一个的datetimeindex子集?

Pandas 另一个的datetimeindex子集?,pandas,Pandas,检查DateTimeIndex是否完全是另一个索引的子集的最快方法是什么 我正在比较两个索引的交集与较小索引的交集:首先是长度,然后是内容。类似的方法可以: index_1 = pd.date_range('1/1/2016', periods=100, freq='H') index_2 = pd.date_range('1/3/2016', periods=15, freq='H') set(index_2).issubset(index_1) 或: 另一种方法是使用内置的Datetime

检查DateTimeIndex是否完全是另一个索引的子集的最快方法是什么


我正在比较两个索引的交集与较小索引的交集:首先是长度,然后是内容。

类似的方法可以:

index_1 = pd.date_range('1/1/2016', periods=100, freq='H')
index_2 = pd.date_range('1/3/2016', periods=15, freq='H')
set(index_2).issubset(index_1)
或:

另一种方法是使用内置的
DatetimeIndex.intersection
方法:

import pandas as pd
import numpy as np
one = pd.date_range('1/1/2011', periods=72, freq='H')
two = pd.date_range('1/2/2011', periods=12, freq='H')

# either...
np.all(one.intersection(two) == two)

# ...or
one.intersection(two).equals(two)
对于大指数,此解决方案的速度明显更快(下面的测试是720k和120k周期):


编辑添加了比较
索引
相等性的替代方法(稍微快一点)。

您能发布您的代码吗?如果此测试对性能敏感,我们是否希望将索引转换为python集然后调用IsubSet的成本可以忽略不计?是的,
%timeit
显示该方法直接慢于索引长度,请参见Igor Raush的答案(IMHO him的答案应该是公认的答案)是的,在我的系统中,对于(3M,0.5M)长度的索引,该方法大约快15倍。如果交叉点为空,上述方法是否仍然有效?或者我们需要先对交叉点的长度进行明确测试吗?是的,空交叉点将是一个空的
DatetimeIndex
,它将不会与任何一个原始范围进行比较。
import pandas as pd
import numpy as np
one = pd.date_range('1/1/2011', periods=72, freq='H')
two = pd.date_range('1/2/2011', periods=12, freq='H')

# either...
np.all(one.intersection(two) == two)

# ...or
one.intersection(two).equals(two)
In [10]: %timeit set(one).issuperset(two)
1 loops, best of 3: 992 ms per loop

In [11]: %timeit np.all(one.intersection(two) == two)
100 loops, best of 3: 8.8 ms per loop

In [12]: %timeit one.intersection(two).equals(two)
100 loops, best of 3: 8.77 ms per loop