Searchsorted比get_loc更快找到DataFrame索引中的标签位置吗?[英] Is searchsorted faster than get_loc to find label location in a DataFrame Index?

本文是小编为大家收集整理的关于Searchsorted比get_loc更快找到DataFrame索引中的标签位置吗?的处理方法,想解了Searchsorted比get_loc更快找到DataFrame索引中的标签位置吗?的问题怎么解决?Searchsorted比get_loc更快找到DataFrame索引中的标签位置吗?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

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

推荐答案

这将取决于您的用例.使用@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 需要单调性(并且不检查).

本文地址:https://www.itbaoku.cn/post/1728103.html