使用 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)
两次;一次用“名称”进行分组;然后再次从“子集”-“类型”对中进行分组。由于我们正在 join
ing 字符串,我们首先使用 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
我有一个数据集
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)
两次;一次用“名称”进行分组;然后再次从“子集”-“类型”对中进行分组。由于我们正在 join
ing 字符串,我们首先使用 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