Python 基于最大值对列表值进行分组

Python 基于最大值对列表值进行分组,python,scikit-learn,cluster-analysis,k-means,Python,Scikit Learn,Cluster Analysis,K Means,如果我有一个数组(X),我正在研究k-均值算法来聚类数字列表 然后我运行以下代码 from sklearn.cluster import AgglomerativeClustering cluster = AgglomerativeClustering(n_clusters=5, affinity='euclidean', linkage='ward') cluster.fit_predict(X) for i in range(len(X)): print("%4d &q

如果我有一个数组(X),我正在研究k-均值算法来聚类数字列表

然后我运行以下代码

from sklearn.cluster import AgglomerativeClustering

cluster = AgglomerativeClustering(n_clusters=5, affinity='euclidean', linkage='ward')
cluster.fit_predict(X)

for i in range(len(X)):
    print("%4d " % cluster.labels_[i], end=""); print(X[i])
我得到了结果

   1     1  [0.85142858]
   2     3  [0.85566274]
   3     3  [0.85364912]
   4     0  [0.81536489]
   5     1  [0.84929932]
   6     1  [0.85042336]
   7     1  [0.84899714]
   8     0  [0.82019115]
   9     4  [0.86112067]
   10    2  [0.8312496]
如何获得每个集群中值为(i)的最大数量?像这样

0: 0.82019115   8
1: 0.85142858   1
2: 0.8312496    10
3: 0.85566274   2
4: 0.86112067   9

首先使用
zip
将它们成对分组,然后按值(成对的第二个元素)按递增顺序排序,并从中创建一个dict

尝试:

最大数量:

{0: array([0.82019115]),
 2: array([0.8312496]),
 1: array([0.85142858]),
 3: array([0.85566274]),
 4: array([0.86112067])}
    0   1
8   0   0.820191
1   1   0.851429
10  2   0.831250
2   3   0.855663
9   4   0.861121
编辑:

{0: array([0.82019115]),
 2: array([0.8312496]),
 1: array([0.85142858]),
 3: array([0.85566274]),
 4: array([0.86112067])}
    0   1
8   0   0.820191
1   1   0.851429
10  2   0.831250
2   3   0.855663
9   4   0.861121
你想要这个吗

elem = list(zip(res, range(1,len(X)+1)))
e = sorted(elem, key=lambda x: x[0][1], reverse=False)
final_dict = {k[0]:(k[1], v) for (k,v) in e}
for key in sorted(final_dict):
    print(f"{key}: {final_dict[key][0][0]} {final_dict[key][1]}")


df:

{0: array([0.82019115]),
 2: array([0.8312496]),
 1: array([0.85142858]),
 3: array([0.85566274]),
 4: array([0.86112067])}
    0   1
8   0   0.820191
1   1   0.851429
10  2   0.831250
2   3   0.855663
9   4   0.861121

Pygirl谢谢,但我需要在同一行中打印(i)Pygirl非常感谢您的帮助,但为什么(i)的值增加1,例如对于集群0,它返回0:[0.82019115]8,而该值应返回0:[0.82019115]7?顺序是0,2,1,3,4???为什么不是0,1,2,3,4?提前感谢,因为您希望索引从1开始,而不是从零开始。这就是为什么。检查我编辑的答案。我已按键对它们重新排序。如果希望索引仅从零开始。然后删除增量1,并在范围内从0开始。
例如,对于集群0,它返回0:[0.82019115]8,该值应返回0:[0.82019115]7
你自己在问题中提到,你的索引看起来像是从1开始,而不是从零开始,然后递增1。你能结束这个问题吗?