【发布时间】:2018-05-29 22:34:00
【问题描述】:
我对 Python 比较陌生,并且遇到以下问题:我正在尝试跨两个时间段(两个不同的数据集)对客户进行聚类。 k-mean 聚类结果存储在 pandas 数据框中,列有“name”、“clustering_period_1”和“clustering_period_2”。由于聚类标签在聚类期间没有任何意义,我想重新分配“clustering_period_2”中的标签。
方法:我想弄清楚第 1 期和第 2 期的每个聚类输出,组合发生的频率,例如在第 1 期将观察分配给集群 1 和在第 2 期分配给集群 5 的频率。我使用 pivot_table 函数执行此操作:
df.pivot_table(index='cluster', columns='cluster_2', values='name', aggfunc='count')
然后我想在“数据透视表”中找到最大值:
cluster_period_2 0 1 2 3 4 5 6
cluster_period_1
0 51 43 50 49 32 36 33
1 26 28 17 34 25 28 30
2 34 47 35 33 37 36 34
3 7 6 2 5 7 5 6
4 30 19 24 26 20 18 20
5 3 11 5 6 4 6 3
6 4 2 1 13 2 4 3
在本例中,这将是 51,这意味着 cluster_0_period_1 现在是 cluster_0_in_period_2。然后,我想找到不在已使用的列和行中的下一个最大值,即不在第 0 行或第 0 列中。这是 47,这意味着 cluster_2_period_1 现在是 cluster_1_period_2。我想这样做,直到我最终得到一个完整的列表,例如(以下示例不基于数据透视表值):
cluster_0_period_1 -> cluster_0_period_2
cluster_1_period_1 -> cluster_4_period_2
...
cluster_6_period_1 -> cluster_5_period_2
我如何最好地实现这一点?或者如果有更有意义的完全不同的方法(例如字典或基于列表),请随时提出建议。
在此先感谢
【问题讨论】:
标签: python-3.x pandas pivot-table cluster-analysis