使用 Python 的模式聚类
Pattern Clustering using Python
我想识别所有模式数据都可以出现在以下数据框的“子集”列中。
DataFrame-
Name Subset
A-1001 0
A-1001 1
A-1001 2
B-1005 3
B-1005 4
D-1015 0
D-1015 1
D-1015 2
L-650 0
L-650 5
L-650 6
V-895 3
V-895 4
在此数据框中,A-1001、D-1015 子集的模式匹配,而 B-1005、V-895 具有相同模式。 L-650 的图案不同。
即输出示例
Pattern# Name
1 A-1001, D-1015
2 B-1005, V-895
3 L-650
如何使用 Python 识别这些模式?
P.S可能有很多未知的模式。
IIUC,您想执行两次 groupby
,一次聚合每个名称的子集并形成“模式”,第二次聚合模式以对名称进行分组:
import numpy as np
(df.groupby('Name', as_index=False)
['Subset'].agg(frozenset) # use a tuple instead of frozenset if order matters
.groupby('Subset', as_index=False)
.agg(list) # use ', '.join instead of list to have a string
.assign(Pattern=lambda d: np.arange(len(d))+1)
)
输出:
Subset Name Pattern
0 (0, 1, 2) [A-1001, D-1015] 1
1 (3, 4) [B-1005, V-895] 2
2 (0, 5, 6) [L-650] 3
我想识别所有模式数据都可以出现在以下数据框的“子集”列中。
DataFrame-
Name Subset
A-1001 0
A-1001 1
A-1001 2
B-1005 3
B-1005 4
D-1015 0
D-1015 1
D-1015 2
L-650 0
L-650 5
L-650 6
V-895 3
V-895 4
在此数据框中,A-1001、D-1015 子集的模式匹配,而 B-1005、V-895 具有相同模式。 L-650 的图案不同。
即输出示例
Pattern# Name
1 A-1001, D-1015
2 B-1005, V-895
3 L-650
如何使用 Python 识别这些模式?
P.S可能有很多未知的模式。
IIUC,您想执行两次 groupby
,一次聚合每个名称的子集并形成“模式”,第二次聚合模式以对名称进行分组:
import numpy as np
(df.groupby('Name', as_index=False)
['Subset'].agg(frozenset) # use a tuple instead of frozenset if order matters
.groupby('Subset', as_index=False)
.agg(list) # use ', '.join instead of list to have a string
.assign(Pattern=lambda d: np.arange(len(d))+1)
)
输出:
Subset Name Pattern
0 (0, 1, 2) [A-1001, D-1015] 1
1 (3, 4) [B-1005, V-895] 2
2 (0, 5, 6) [L-650] 3