微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Pandas 数据框中每个组的 Kmeans 聚类并分配聚类 groupby 和 apply 一个聚类函数

如何解决Pandas 数据框中每个组的 Kmeans 聚类并分配聚类 groupby 和 apply 一个聚类函数

我想使用 kmeans 聚类为组月份聚类 X2 和 X3。我需要对两个变量进行聚类。另外,我想根据每个集群的平均值将集群 0 、集群 1 和集群 2 分配给“强”、“平均”、“弱”,最高意味着强集群。下面是我的示例数据集。

df=pd.DataFrame({'month':['1','1','2','2'],'X1': 
[30,42,25,32,12,10,4,6,5,24,21],'X2':[10,76,100,23,65,94,67,54,87,81],'X3': 
[23,78,95,52,60,68,92,34,12]})
df

我需要自动执行此操作,从那时起我有很多列,我想在 2 个列 (df.loc[:,2:3]) 上执行此操作。为每个定义分配集群是

集群 2="最佳"

集群 1="平均"

集群 0="弱"

要找到最好的集群,找到每列的平均值,然后求和,如果它是最高的,则将其分配为“最佳”,较低为平均值,最低为“弱”

请帮忙谢谢

解决方法

groupbyapply 一个聚类函数

我们可以按 month 对数据框进行分组,并使用自定义的聚类函数对 X2X3 列进行聚类

cols = df.columns[2:4]
mapping = {0: 'weak',1: 'average',2: 'best'}

def cluster(X):
    k_means = KMeans(n_clusters=3).fit(X)
    return X.groupby(k_means.labels_)\
            .transform('mean').sum(1)\
            .rank(method='dense').sub(1)\
            .astype(int).to_frame()

df['Cluster_id'] = df.groupby('month')[cols].apply(cluster)
df['Cluster_cat'] = df['Cluster_id'].map(mapping)

   month  X1   X2  X3  Cluster_id Cluster_cat
0      1  30   10  23           0        weak
1      1  42   76  78           1     average
2      1  25  100  95           2        best
3      1  32   23  52           0        weak
4      1  12   65  60           1     average
5      2  10   94  76           2        best
6      2   4   67  68           2        best
7      2   6   24  92           1     average
8      2   5   67  34           0        weak
9      2  10   54  76           2        best
10     2  24   87  34           0        weak
11     2  21   81  12           0        weak

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。