K-Means聚类后如何统计各簇样本数及default列0/1数量?
K-Means聚类后统计default列分布的问题解决
问题背景
现有数据集包含gender、education、age、years of marriage、amount spent5列特征,执行K=5的K-Means聚类后,能正常统计各簇样本总数,但统计default列的0/1数量时出现报错:KeyError: 'Column not found: DEFAULT'。
报错原因
从代码逻辑来看:
- 用于训练K-Means的
data_norm1仅包含上述5列特征,未包含default列 - 后续生成的
df1_norm是基于data_norm1创建的,因此也没有default列 - 此前分组
default列用的是原始数据集df,但该数据集和聚类后的df1_norm未关联
解决步骤
1. 将default列合并到聚类结果中
如果原始数据集df和聚类后的df1_norm行顺序完全一致,直接添加列即可:
# 把原始df中的default列加入聚类结果df1_norm df1_norm['default'] = df['default']
若担心行顺序不一致,可先重置索引再合并:
# 重置索引确保两行数据对齐 df = df.reset_index(drop=True) df1_norm = df1_norm.reset_index(drop=True) # 合并default列 df1_norm = pd.concat([df1_norm, df['default']], axis=1)
2. 统计各簇的default分布
添加列后,即可完成统计:
# 统计每个簇的样本总数 cluster_counts = df1_norm.groupby('Cluster1').size() # 统计每个簇中default=0和default=1的数量 default_dist = df1_norm.groupby('Cluster1')['default'].value_counts().unstack(fill_value=0) # 计算每个簇中default=1的占比(mean值即为1的比例) default_1_ratio = df1_norm.groupby('Cluster1')['default'].mean()
内容的提问来源于stack exchange,提问作者unleasehed
相关产品推荐
相关产品推荐

