如何获取DataFrame每列中k个最小值的对应行索引,用于后续KNN计算
你当前的代码取到的是包含值的Series对象,要提取行索引只要访问nsmallest返回结果的index属性即可,以下是两种实现方式:
方式1:修改你现有的循环逻辑
list_min = [] for column in ddist: # 直接取k个最小值对应的行索引 col_min_index = ddist.nsmallest(k, column).index # extend将索引列表摊平存入总列表,若需要按列分组存储可改用append list_min.extend(col_min_index.tolist()) # 可选:如果需要去重且保留首次出现的顺序 # list_min = list(dict.fromkeys(list_min))
方式2:更简洁的向量化写法(无需显式循环)
list_min = ddist.apply(lambda x: x.nsmallest(k).index).explode().tolist()
原代码问题说明
你之前写的idx=idx[0]是取了筛选结果的第一列数据(也就是距离值列),返回的是带索引的Series,所以会同时展示行号和对应值。去掉这一步,直接取.index就能拿到纯行号对象。
内容的提问来源于stack exchange,提问作者Regina Briseño
相关产品推荐
相关产品推荐

