使用 Pandas 的数据聚类

Data Clustering using Pandas

我有一个数据集

Name    Subset    Type    System
A00     IU00-A    OP      A
A00     IT00      PP      A
B01     IT-01A    PP      B
B01     IU        OP      B
B03     IM-09-B   LP      A
B03     IM03A     OP      B
B03     IT-09     OP      A
D09     IT        OP      B
D09     IM        LP      B
D09     IM        OP      A

所以在这里我需要对 Name 列进行分组,使 Subset 和 Type 相似。 我们只需要考虑子集列的第一个字母部分而忽略其余部分。比如IM-09-B,IM03A可以认为是IM。

需要输出

Subset Cluster    Type Cluster    Name        System
IU,IT             OP,PP           A00,B01     A,A,B,B
IM,IM,IT          LP, OP, OP      B03, D09    A,B,A,B,B,A

这里形成了第一个集群实例,因为在这两种情况下,IU 是 OP,IT 是 PP,第二个实例类似。

您可以使用 groupby + agg(join) 两次;一次用“名称”进行分组;然后再次从“子集”-“类型”对中进行分组。由于我们正在 joining 字符串,我们首先使用 sort_values 以便稍后加入时,每个组将具有相同的元素顺序。

out = (df.assign(Subset=df['Subset'].str[:2])
       .sort_values(by=df.columns.tolist())
       .groupby('Name').agg(', '.join)
       .add_suffix(' Cluster').reset_index()
       .set_index(['Subset Cluster', 'Type Cluster'])
       .groupby(level=[0,1]).agg(', '.join).reset_index())

输出:

  Subset Cluster Type Cluster      Name
0     IM, IM, IT   LP, OP, OP  B03, D09
1         IT, IU       OP, PP  A00, B01