根据pandas的文档,我得出结论:唯一值索引可以使某些操作更加高效,并且偶尔会容忍非唯一索引。
从外部来看,似乎没有利用非唯一索引的任何方式。例如,下面的ix
查询速度很慢,似乎正在扫描整个数据框。
In [23]: import numpy as np
In [24]: import pandas as pd
In [25]: x = np.random.randint(0, 10**7, 10**7)
In [26]: df1 = pd.DataFrame({'x':x})
In [27]: df2 = df1.set_index('x', drop=False)
In [28]: %timeit df2.ix[0]
1 loops, best of 3: 402 ms per loop
In [29]: %timeit df1.ix[0]
10000 loops, best of 3: 123 us per loop
我知道这两个ix
查询返回的结果不同--这只是一个例子,调用非唯一索引上的ix
似乎要慢得多。
有没有办法诱使pandas在非唯一和/或排序索引上使用更快的查找方法,比如二分查找?
df1.loc[100]
做的事情与其他两个语句完全不同,即使用隐式创建的RangeIndex
检索第100行,而其他两个语句检索所有 x == 100 的行。 - Ernesto Elsäßer