我正在使用Kmeans将交易者过去的数据聚类到聚类中。我有10个交易者,并且正在集群为3个集群。现在获得每个索引的集群和标签后,我想知道每个集群拥有的交易者的名称。例如,如果Cluster-0有3个交易者,则输出应类似于
{'Cluster0': 'Name1','Name2','Name3'}
{'Cluster1': 'Name5','Name4','Name6'}
,依此类推。我能够通过以下方式获得属于每个群集的数据点的索引:
cluster_dict = {i: np.where(data['Labels'] == i) for i in range(n_clusters)}
然后,我从新的交易者数据(如0-16 trader1, 16-32 trader2
之类的索引中获取索引列表。我在列表中也有交易者的名字为['name1','name2','name3']
。
如上所述,有什么方法可以找回每个集群的交易者名称。如果是的话,请帮我。
答案 0 :(得分:1)
我认为您需要以下类似内容
首先获取标签值并将其分配到您的数据框中,然后根据标签应用groupby by并在名称(A,B,C)列中找到唯一值并存储结果。
下面的代码片段演示了您的问题。
from sklearn.cluster import KMeans
import numpy as np
import pandas as pd
X = pd.DataFrame([[1, 2,'A'], [1, 4,'A'], [1, 0,'B'],[4, 2,'C'], [4, 4,'C'], [4, 0,'B']])
kmeans = KMeans(n_clusters=2, random_state=0).fit(X[[0,1]])
result= kmeans.labels_
X['label']=result
print X.groupby('label')[2].unique()
输出:
label
0 [A, B]
1 [C, B]
对于Dict表示法,
print X.groupby('label')[2].unique().to_dict()
输出:
{0: array(['A', 'B'], dtype=object), 1: array(['C', 'B'], dtype=object)}
要在同一数据框中获得结果,请在下面使用
X['cluster_name']= X.groupby('label')[2].transform('unique')
输出:
0 1 2 label cluster_name
0 1 2 A 0 [A, B]
1 1 4 A 0 [A, B]
2 1 0 B 0 [A, B]
3 4 2 C 1 [C, B]
4 4 4 C 1 [C, B]
5 4 0 B 1 [C, B]