python - K-Means 按组分类

标签 python pandas k-means sklearn-pandas

我正在尝试在这样的数据框中进行 K 均值分析:

    URBAN AREA  PROVINCE    DENSITY
0   1          TRUJILLO     0.30
1   2          TRUJILLO     0.03
2   3          TRUJILLO     0.80
3   1          LIMA         1.20
4   2          LIMA         0.04
5   1          LAMBAYEQUE   0.90
6   2          LAMBAYEQUE   0.10
7   3          LAMBAYEQUE   0.08

(可以从here下载)

如您所见,df 指的是省内不同的城市区域(具有不同的城市密度值)。所以,我想通过一列 DENSITY 进行 K 均值分类。为此,我执行以下代码:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

df=pd.read_csv('C:/Path/to/example.csv')

clustering=KMeans(n_clusters=2, max_iter=300)
clustering.fit(df[['DENSITY']])

df['KMeans_Clusters']=clustering.labels_
df

我得到了这个结果,这对于示例的第一部分来说是可以的:

    URBAN AREA  PROVINCE    DENSITY     KMeans_Clusters
0   1           TRUJILLO       0.30     0
1   2           TRUJILLO       0.03     0
2   3           TRUJILLO       0.80     1
3   1           LIMA           1.20     1
4   2           LIMA           0.04     0
5   1           LAMBAYEQUE     0.90     1
6   2           LAMBAYEQUE     0.10     0
7   3           LAMBAYEQUE     0.08     0

但是我现在想做分省市区的k-means分类。我的意思是,在任何省份重复同样的过程。所以我试过这段代码:

df=pd.read_csv('C:/Users/rojas/Desktop/example.csv')

clustering=KMeans(n_clusters=2, max_iter=300)

clustering.fit(df[['DENSITY']]).groupby('PROVINCE')

df['KMeans_Clusters']=clustering.labels_
df

但我收到这条消息:

AttributeError                            Traceback (most recent call last)
<ipython-input-4-87e7696ff61a> in <module>
      3 clustering=KMeans(n_clusters=2, max_iter=300)
      4 
----> 5 clustering.fit(df[['DENSITY']]).groupby('PROVINCE')
      6 
      7 df['KMeans_Clusters']=clustering.labels_

AttributeError: 'KMeans' object has no attribute 'groupby'

有办法吗?

最佳答案

试试这个

def k_means(row):
    clustering=KMeans(n_clusters=2, max_iter=300)
    model = clustering.fit(row[['DENSITY']])
    row['KMeans_Clusters'] = model.labels_
    return row

df = df.groupby('PROVINCE').apply(k_means)

结果

URBAN   AREA    PROVINCE    DENSITY KMeans_Clusters
0   0   1   TRUJILLO    0.30    0
1   1   2   TRUJILLO    0.03    0
2   2   3   TRUJILLO    0.80    1
3   3   1   LIMA    1.20    1
4   4   2   LIMA    0.04    0
5   5   1   LAMBAYEQUE  0.90    0
6   6   2   LAMBAYEQUE  0.10    1
7   7   3   LAMBAYEQUE  0.08    1

关于python - K-Means 按组分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68232429/

相关文章:

python - 比较两个不同大小的 Pandas 数据框

python - 如何绘制文本 K 均值聚类的结果?

python-3.x - 在PCA中选择K-分量后,我们如何找出算法选择了哪些分量(列名)?

python - 使用 BeautifulSoup 从表中的单元格中提取值

python - Pandas:如果字符串列表中不存在,则将其替换为 'other'

Python 将数据集中的相似记录(字符串)分组

python-3.x - 如何管理Python中两个范围之间的值?

matlab - 使用 NaN 在矩阵上运行 kmeans 函数?

python - django 测试 RequestFactory 无法使路由参数工作

python - Linux:让 systemd 立即终止正在运行的 Python 脚本?