在DataFrame索引中,使用searchsorted比get_loc更快吗?

4

我需要在Pandas索引中找到标签的整数位置。我知道可以使用get_loc方法,但后来发现了searchsorted。只是想知道是否应该使用后者以提高速度,因为我需要搜索成千上万个标签。


1
你需要get_loc方法或容差参数吗?如果不需要,np.searchsorted更通用,因此速度应该更快。 - ayhan
我不需要容错,只需要精确匹配。谢谢! - luca
1个回答

7

这将取决于您的用例。使用@ayhan的示例。

使用get_loc时,第一次查找需要创建哈希表,因此前期成本较高。

In [22]: idx = pd.Index(['R{0:07d}'.format(i) for i in range(10**7)])
In [23]: to_search = np.random.choice(idx, 10**5, replace=False)
In [24]: %time idx.get_loc(to_search[0])
Wall time: 1.57 s

但是,后续的查找可能会更快。 (不能保证,取决于数据)

In [9]: %%time
   ...: for i in to_search:
   ...:     idx.get_loc(i)
Wall time: 200 ms

In [10]: %%time
    ...: for i in to_search:
    ...:     np.searchsorted(idx, i)
Wall time: 486 ms

此外,正如Jeff所指出的那样,get_loc保证始终有效,而searchsorted则需要单调性(而且不进行检查)。

太棒了,需要考虑的细节非常多。谢谢! - luca

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接