Python:将一个pandas系列转换成数组,并保留索引

Python: Convert a pandas Series into an array and keep the index

我正在 运行使用 k-means 算法 (k=5) 对我的数据进行聚类。为了检查我的算法的稳定性,我首先 运行 我的整个数据集上的算法一次,然后我 运行 我的数据集的 2/3 多次 运行 算法(使用不同的随机状态进行分割).我使用结果来预测剩余 1/3 数据的集群。最后,我想将预测的集群与我在整个数据集上 运行 k-means 时得到的集群进行比较。这就是我卡住的地方。

由于 k-means 总是为(或多或少)相同的集群分配不同的标签,我不能只比较它们。我尝试使用 .value_counts() 根据标签的频率重新分配标签 0 到 4。但是因为我 运行 这个检查了很多次,所以我需要一些可以循环工作的东西。
基本上,当我使用 .value_counts() 时,我会得到这样的结果:

     PredictedCluster  
4              55555  
0              44444
2              33333
1              22222
3              11111

我希望我能把它变成一个数组,其中标签按大小排序:

a = [[4, 55555],[0,44444],...,[3,11111]]

谁能告诉我该怎么做,或者我可以使用哪些其他方法来解决我的问题?

像下面这样的一行代码可以工作:

a = list(map(list, df["PredictedCluster"].value_counts().items()))

一种选择是使用:

(df['PredictedCluster'].value_counts(ascending=False)
                       .reset_index()
                       .to_numpy())

这将计算值,按这些计数排序(降序),然后将结果转换为 numpy.ndarray

如果您想要列表中的结果,只需将 .tolist() 附加到语句末尾即可。