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

如何在Python中为K-Means分析后的DataFrame添加原数据列?

解决方法:给聚类结果DataFrame添加原始x、y列

当然可以实现这个需求!这其实是个很常见的操作,而且实现起来非常简单——因为你生成的sh_df和原始数据的每一行都是一一对应的,索引完全匹配,所以有几种轻松的方法可以把x、y列加进去:

方法一:创建sh_df时直接包含x、y列

最直接的方式就是在初始化sh_df的时候,把原始的x、y列一起放进DataFrame的字典里,一步到位:

sh_df = pd.DataFrame(
    {
        'x': df2['x'],  # 直接从df2取x列
        'y': df2['y'],  # 直接从df2取y列
        'silhouette': silhouette_samples(df2, assignedClusters.labels_),
        'cluster': assignedClusters.labels_
    }
)

方法二:用pd.concat合并现有sh_df和原始数据列

如果已经生成了原来的sh_df,不想重新创建,可以用pd.concat按列合并两个DataFrame(因为索引一致,会自动对应每一行):

# 先保留你原来生成sh_df的代码
sh_df = pd.DataFrame(
    {
        'silhouette': silhouette_samples(df2, assignedClusters.labels_),
        'cluster': assignedClusters.labels_
    }
)
# 合并df2(包含x、y)和sh_df
sh_df = pd.concat([df2, sh_df], axis=1)

这里的axis=1参数表示按列合并,一定要加上,不然会变成按行拼接,结果就错了。

方法三:直接给sh_df新增列

还有一种更直观的方式,就是直接给sh_df赋值新增x、y列,Pandas会自动根据索引匹配对应行的数据:

# 先保留你原来生成sh_df的代码
sh_df = pd.DataFrame(
    {
        'silhouette': silhouette_samples(df2, assignedClusters.labels_),
        'cluster': assignedClusters.labels_
    }
)
# 直接添加x、y列
sh_df['x'] = df['x']
sh_df['y'] = df['y']
# 或者用df2也可以,因为df2就是df的x、y子集
# sh_df['x'] = df2['x']
# sh_df['y'] = df2['y']

完整示例代码

这里给你整理好整个流程的代码,你可以直接复制使用:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_samples

# 假设你的原始DataFrame df已经存在
df2 = df[['x','y']]
k = KMeans(n_clusters=3)
assignedClusters = k.fit(df2)

# 用方法一创建包含x、y的sh_df
sh_df = pd.DataFrame(
    {
        'x': df2['x'],
        'y': df2['y'],
        'silhouette': silhouette_samples(df2, assignedClusters.labels_),
        'cluster': assignedClusters.labels_
    }
)

# 查看结果的前几行
print(sh_df.head())

小提示

如果担心索引不匹配,可以先运行print(df2.index.equals(sh_df.index))验证一下,返回True就说明两行数据的索引完全对应,合并不会有问题——而K-Means生成的标签数量和原始数据行数是完全一致的,所以肯定是匹配的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:07:53