如何解决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="弱"
要找到最好的集群,找到每列的平均值,然后求和,如果它是最高的,则将其分配为“最佳”,较低为平均值,最低为“弱”
请帮忙谢谢
解决方法
groupby
和 apply
一个聚类函数
我们可以按 month
对数据框进行分组,并使用自定义的聚类函数对 X2
和 X3
列进行聚类
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 举报,一经查实,本站将立刻删除。