sklearn聚类如何提取各簇对应样本的原始标识符ID
问题:如何保留KMeans聚类结果与原始DataFrame行标识符的对应关系
你当前的代码逻辑里,行顺序天然是对齐的:df.to_numpy() 输出的数组行顺序和原DataFrame的行顺序完全一致,KMeans.fit_predict() 返回的标签数组y_km的元素顺序,和输入数组的行顺序严格一一对应,不需要借助to_records()做额外处理,直接按位置匹配即可。
最优实现方案
第一步:对齐标签到原数据
直接把聚类标签作为新列追加到原DataFrame,全程不改动原数据的行顺序即可保证匹配准确:
# 执行完y_km = km.fit_predict(array)后直接追加列,中间不要对df做行重排、筛选操作 df['cluster_id'] = y_km
追加完成后,DataFrame的行索引(即你读入文件时设置的identifier字段)就和对应聚类簇完成了绑定。
第二步:输出需要的格式
- 输出「标识符:簇ID」格式的字典:
id_cluster_dict = df['cluster_id'].to_dict()
- 导出为带标识符的文本/CSV文件:
# 导出时默认会保留行索引即identifier字段 df.to_csv('kmeans_cluster_result.csv', encoding='utf-8')
导出的CSV文件第一列为原始标识符,最后一列为对应簇编号,可直接用表格工具打开查看。
无修改原DataFrame的实现方式
如果你不想改动原DataFrame结构,直接通过索引和标签数组的位置配对生成映射即可:
# 按位置一一配对生成字典 id_cluster_dict = dict(zip(df.index, y_km))
注意事项
- 只要你在生成numpy数组到得到聚类标签的流程中,没有对原DataFrame做行删除、重排、采样等打乱行顺序的操作,上述匹配逻辑100%准确
- 如果中间做过行顺序调整,只需要保证传给KMeans的数组行顺序,和用来配对的ID列表顺序一致即可,本质是位置一一对应的关系

内容的提问来源于stack exchange,提问作者eric
相关产品推荐
相关产品推荐

