我有一个包含数百行和 10 列的 Pandas DataFrame。每行代表一个唯一的 ID,每列代表第 k 个最近邻索引。也就是说,第一列将用于 ID 的最近邻居的索引,第二列将是第二个最近的邻居,依此类推,直到第 10 个最近的邻居。
然而,第一列有一些重复,因为有几个 ID 共享一个公共最近邻。但是,我想在没有重复的情况下找到每个 ID 的最近邻索引。例如,如果前两个 ID 共享最近的邻居,那么我想使用第二列来查找第二个 ID 的非重复最近邻居。例如,如果我的 DataFrame 如下所示:
NN1 NN2 NN3 ... NN10
1 1 3 8
2 1 5 9
3 1 5 2
4 3 8 1
那么结果将是:
NN_no_dup
1 1
2 5
3 2
4 3
在我的例子中,据我所知,在使用第 10 个最近邻之后,似乎没有出现重复的情况(如果有,我可以简单地增加我使用的最近邻的数量)。
这可能有效,尽管它肯定不是最优雅的方式:
a = pd.DataFrame(....)
used_list = []
for i in range(a.shape[0]):
if np.isin(a.iloc[i,0],used_list):
take_column = ~np.isin(a.iloc[i], used_list)
a.iloc[i,0] = a.iloc[i,np.argmax(take_column)]
used_list.append(a.iloc[i,0])
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句