You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对KMeans聚类后的DataFrame按升序重新索引聚类标签?

KMeans聚类标签按特征值升序重排的解决方案

你的现有代码是可行的,能实现把recency最小值对应的聚类标签设为0、依次递增到3的需求,不过还有更直观高效的优化方案,下面详细说明:

现有方案的有效性验证

你写的这段代码逻辑是通顺的:

rfm_df['recency_normalized_cluster'] = rfm_df.groupby('recency_cluster')['recency'].transform('min').astype('category').cat.codes
  • groupby('recency_cluster')['recency'].transform('min')会为每条数据匹配其所属聚类的recency最小值;
  • 转成category类型后,cat.codes会自动按类别值的升序分配编码,刚好满足你“最小值对应0,最大值对应3”的要求。

更优的映射方案

如果追求逻辑更直观、大数据下性能更好,可以先构建原始聚类标签到新标签的映射关系,再批量替换:

# 1. 计算每个原始聚类的recency最小值,并按最小值排序
cluster_min_df = rfm_df.groupby('recency_cluster')['recency'].min().sort_values().reset_index()
# 2. 为排序后的聚类分配0到3的新标签
cluster_min_df['new_cluster_label'] = range(len(cluster_min_df))
# 3. 构建映射字典,用map替换原始标签
label_map = cluster_min_df.set_index('recency_cluster')['new_cluster_label'].to_dict()
rfm_df['recency_normalized_cluster'] = rfm_df['recency_cluster'].map(label_map)

这种方法的优势:

  • 步骤透明,能直接查看cluster_min_df里原始标签和新标签的对应关系,便于调试;
  • 避免了全量数据的transform操作,在处理大型数据集时效率更高。

扩展提示

如果后续需要对RFM模型里的frequency、monetary字段做同样的聚类标签标准化,只需要把代码里的recency替换成对应字段即可,逻辑完全复用。

内容的提问来源于stack exchange,提问作者Rod0n

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 23:22:13