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

赋值cut_tree生成的聚类标签后DataFrame缺失200行问题求助

聚类后DataFrame行丢失排查思路与解决方案

排查步骤

  • 核对数据长度匹配性:依次打印len(聚类输入特征矩阵)、len(cluster_labels)、赋值标签前的rfm.shape[0],确认三者数值是否一致。90%以上的这类问题都是特征缩放、移除离群值后,仅过滤了用于聚类的特征集,没有同步过滤rfm主表,导致特征集本身就比rfm少200行。
  • 校验索引对齐性:分别输出rfm的索引rfm.index和聚类输入特征集的索引,确认两个索引序列是否完全重合。如果特征处理过程中执行过reset_index()操作但rfm未同步修改,pandas按索引赋值时会给不匹配的行填充空值,后续如果有隐式删空操作就会丢失行。
  • 定位行数减少的节点:在执行rfm['cluster_labels'] = cluster_labels代码前后分别打印rfm.shape[0],确认行数减少是否发生在赋值阶段。如果赋值前就已经少了200行,需要回溯之前的操作代码是否有隐式过滤。
  • 验证cut_tree输出长度:层次聚类的合并矩阵mergings是基于输入样本量生成的,输入n个样本时cut_tree输出的标签长度必然为n,如果len(cluster_labels)不等于预期的50000,可直接确认聚类输入的样本量本身就只有49800个。

解决方案

  • 同步主表与特征集的行:如果确认是特征过滤后未同步rfm,直接用特征集的索引对rfm做切片,再赋值标签即可:
    # feature_matrix为你输入层次聚类的特征数据集
    rfm = rfm.loc[feature_matrix.index]
    rfm['cluster_labels'] = cluster_labels
    
  • 统一索引避免匹配错误:如果是索引不一致导致的赋值空值,处理完特征后同时给特征集和rfm重置索引再赋值:
    feature_matrix = feature_matrix.reset_index(drop=True)
    rfm = rfm.reset_index(drop=True)
    rfm['cluster_labels'] = cluster_labels
    
  • 空值特殊处理:如果需要保留无聚类标签的200行,赋值后可单独给空值打特殊标记,避免被后续的dropna()误删:
    rfm['cluster_labels'] = rfm['cluster_labels'].fillna(-1)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:18:03