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

使用Kmeans生成分组聚类中心:循环创建logCenters DataFrame遇报错

嘿,我懂你遇到的问题了——其实完全不用手动遍历groupby的组来计算聚类中心哦,不管是用KMeans自带的属性,还是直接用groupby的聚合方法,都能轻松搞定,还能避免遍历过程中可能踩的各种小坑。

方法一:直接用KMeans的cluster_centers_(最推荐)

KMeans在拟合数据后,cluster_centers_已经帮你算好了每个簇的中心,这是一个二维数组,每行对应一个簇的特征均值。你直接把它转成DataFrame就行,步骤超简单:

import pandas as pd
from sklearn.cluster import KMeans

# 假设你已经完成了聚类,比如:
# 先定义特征列(排除非数值列,比如聚类结果列本身)
feature_cols = [col for col in df.columns if col != 'clusters']
# 拟合KMeans模型
kmeans = KMeans(n_clusters=你的簇数, random_state=42)
df['clusters'] = kmeans.fit_predict(df[feature_cols])

# 用cluster_centers_生成聚类中心DataFrame
logCenters = pd.DataFrame(kmeans.cluster_centers_, columns=feature_cols)
# 添加簇编号列,和原DataFrame的clusters对应
logCenters['clusters'] = range(kmeans.n_clusters)

这种方法既高效又准确,完全不用手动遍历分组,还能保证和KMeans模型输出的簇编号完全对应。

方法二:用groupby的mean()方法验证/替代

如果你想通过分组计算来验证中心(或者你用的不是KMeans聚类),其实groupby直接调用mean()就能得到每个簇的中心(因为KMeans的中心本质就是簇内样本的特征均值):

# 按clusters分组,计算每个组的特征均值
logCenters = df.groupby('clusters')[feature_cols].mean().reset_index()

这里要注意:一定要指定feature_cols,如果原DataFrame里有非数值列(比如字符串、分类列),直接groupby.mean()会自动忽略这些列,但手动指定特征列更稳妥,避免不必要的错误。

为什么你之前遍历会出错?

大概率是遍历分组时的细节没处理好:比如没有正确提取每个组的特征列,或者计算均值时不小心包含了非数值列(比如clusters列本身),甚至是遍历过程中追加DataFrame的方式不对(比如用append效率低还容易出错,现在推荐用pd.concat)。上面两种方法都帮你避开了这些问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:39:59