我需要在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
Run Code Online (Sandbox Code Playgroud)
但是,后续查找可能会更快.(不保证,取决于数据)
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
Run Code Online (Sandbox Code Playgroud)
此外,正如杰夫指出的那样,get_loc保证始终有效,searchsorted需要单调性(并且不检查).