如何在O1中按键列选择行? Python数据表

问题描述

如何在O(1)中按键值获取行?

我在文档中找到选择行的唯一方法是行选择器,它似乎没有利用列的键控状态。

例如此表中的

size = 10**4
DT = dt.Frame({'id':range(size)})
DT.key = 'id'

与按行号访问相比,使用行选择器的访问确实很慢:

for i in range(size):
    DT[dt.f.id==i,:]
# ~2.61 s

for i in range(size):
    DT[i,:]
# ~0.03 s

由于该列已输入密钥,所以我期望能够在O(1)中进行访问,但是我不知道实现此目的的正确方法

解决方法

通过联接模拟行选择器可以更快地获得结果:

for i in range(size):
    dt.Frame(id = [i])[:,:,dt.join(DT)]
# ~0.4 s

我相信创建中间框架dt.Frame(id = [i])是很慢的部分。