Python 唯一索引的索引查找速度较慢

Python 唯一索引的索引查找速度较慢,python,pandas,dataframe,Python,Pandas,Dataframe,我想在使用熊猫数据帧时快速查找索引。如前所述,我明白我需要保持索引的唯一性,否则一切希望都将破灭 我确保索引已排序且唯一: df = df.sort_index() assert df.index.is_unique 我测量了查找速度: %timeit df.at[tuple(q.values), 'column'] 1000 loops, best of 3: 185 µs per loop 然后,当我将索引移动到单独的python字典时: index = {} for i in df.i

我想在使用熊猫数据帧时快速查找索引。如前所述,我明白我需要保持索引的唯一性,否则一切希望都将破灭

我确保索引已排序且唯一:

df = df.sort_index()
assert df.index.is_unique
我测量了查找速度:

%timeit df.at[tuple(q.values), 'column']
1000 loops, best of 3: 185 µs per loop
然后,当我将索引移动到单独的python字典时:

index = {}
for i in df.index:
  index[i] = np.random.randint(1000)
assert len(index) == len(df.index)
我得到了一个巨大的加速:

%timeit index[tuple(q.values)]
100000 loops, best of 3: 2.7 µs per loop

为什么会这样?我做错什么了吗?有没有办法复制python dict的速度(或者是一些有趣的行为。我的最佳猜测是,一个数据帧有很多dict没有的包袱。此外,数据帧不是为查找而优化的,而是为矩阵运算而优化的。这是一个潜在的问题,但仍然存在一个问题,即如何禁用pandas开销以接近dict的性能。我是c目前只是把一个dict放在pandas索引的顶部,但肯定有人会遇到这个问题,并将解决方案合并到pandas中?还是有一个内在的原因使得不可能将一个合适的dict作为索引?有趣的行为。我最好的猜测是,一个数据帧附带了很多dict没有的包袱。数据帧也不是为查找而优化,但用于矩阵运算。这是一个基本问题,但仍然存在一个问题,即如何禁用pandas开销以接近dict的性能。我目前只是将dict放在pandas索引的顶部,但肯定有人会在之前遇到此问题并将解决方案合并到pandas中?或者是否有一个内在的原因,使有一个适当的dict作为索引是不可能的?