【发布时间】:2020-11-05 21:00:39
【问题描述】:
我有一个大型数据框:
user_id time_interval A B C D E F G H ... Z
0 12166 2.0 3.0 1.0 1.0 1.0 3.0 1.0 1.0 1.0 ... 0.0
1 12167 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 ... 0.0
2 12168 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 ... 0.0
3 12169 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 ... 0.0
4 12170 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 ... 0.0
... ... ... ... ... ... ... ... ... ... ... ... ...
我想根据 A-Z 列作为坐标,为每个 user_id 找到“半径”距离 r 内的最近邻居。例如,对于 r=0.1,输出应如下所示:
user_id neighbors
12166 [12251,12345, ...]
12167 [12168, 12169,12170, ...]
... ...
我尝试在整个 user_id 列表中进行 for 循环,但这需要很长时间。 我做了这样的事情:
import scipy
neighbors = []
for i in range(len(dataframe)):
user_neighbors = [dataframe["user_id"][j] for j in range(i+1,len(dataframe)) if scipy.spatial.distance.euclidean(dataframe.values[i][2:],dataframe.values[j][2:])<0.1]
neighbors.append([dataframe["user_id"][i],user_neighbors])
我已经等了好几个小时了。 有没有pythonic的方法来改进这个?
【问题讨论】:
-
也请与我们分享您已经尝试过的方法以及为什么它不起作用。
-
我编辑了。我尝试在整个 user_id 列表中循环,但需要很长时间
-
@stellasia 我不知道为什么我的尝试没有出现在第一版中。我刚刚重新编辑了这个问题,现在它正在显示
标签: python pandas nearest-neighbor