pandas 在Python中,需要一种有效的方法来将kdtree索引Map到值

wydwbb8l  于 2023-04-18  发布在  Python
关注(0)|答案(1)|浏览(119)

我正在使用scikit-learn的kdtree来处理一个非常大的数据集。
我可以让kdtree在合理的时间内完成查询(在我的机器上20分钟),但我不能在不到1小时的任何时间内将索引Map到它们所表示的值(我在1小时后停止等待)。
我加载了2个csv文件(train.csv有29 M条记录,test.csv有8 M条记录)。我对3个键感兴趣。'x','y'是浮点数,'placeid'是字符串。

from sklearn.neighbors import KDTree
import pandas as pd

train = pd.read_csv("train.csv")
test = pd.read.csv("test.csv")

tree = KDTree(train[['x','y']])
_, indexes = tree.query(test[['x','y']],k=30)

# takes 20 minutes to get here.  Here is the code that takes more than an hour

result = [[train.iloc[idx].place_id for idx in idx_set] for idx_set in indexes]

有没有更快的方法呢?我的目标是将所有从KDTree返回的索引Map到place_ids。

zd287kbt

zd287kbt1#

也许你可以给予一下,因为你不想从query的距离:

indexes = tree.query(test[['x','y']],k=30,return_distance=False,dualtree=True,sort_results=False)

这可能会减少第一部分的计算时间。对于第二部分,我正在考虑flatten或reshape索引和slice place_id而不是双循环。你能提供result的格式吗?它只是一个简单的列表吗?

相关问题