正在为不同的群集创建数据帧



我有一个数据集

Name    System
A       AZ
A       NaN
B       AZ
B       NaN
B       NaN
C       AY
C       AY
D       AZ
E       AY
E       AY
E       NaN
F       AZ
F       AZ
F       NaN

使用该数据集,我基于";系统";对于特定的";名称";。

在上面的例子中,名称A、B和D具有一个"0";AZ"子集";而C、E具有两个";AY";子集和F有两个AZ,所以它是一个不同的簇。聚类形式如下;

Cluster     Names
AZ          A,B
AY,AY       C,E
AZ,AZ       F 

用于生成集群的代码:

df1 = (df.dropna(subset=['System'])
.groupby('Name')['System']
.agg(','.join)
.reset_index()
.groupby('System')['Name']
.agg(','.join)
.rename_axis('Cluster')
.reset_index())

基于这个集群输出,我需要不同集群的不同数据帧:我该怎么做?

输出示例-

数据帧1-

Name    System
A       AZ
A       NaN
B       AZ
B       NaN
B       NaN

数据帧2

Name    System
C       AY
C       AY
E       AY
E       AY
E       NaN

数据帧3

Name    System
F       AZ
F       AZ
F       NaN

您可以修改我以前的答案:

获取集群

clusters = (df.groupby(['Name', 'System'])
['System'].agg(Cluster=lambda x: (x.iloc[0], len(x)))
.droplevel('System').reset_index()
.groupby('Cluster')['Name'].agg(frozenset)
.reset_index()
)
#    Cluster       Name
# 0  (AY, 2)     (C, E)
# 1  (AZ, 1)  (A, B, D)
# 2  (AZ, 2)        (F)

按分组

groups = df['Name'].map(clusters.explode('Name').set_index('Name')['Cluster'])
for _,d in df.groupby(groups):
print(d)
#    Name System
# 5     C     AY
# 6     C     AY
# 8     E     AY
# 9     E     AY
# 10    E    NaN
#
#   Name System
# 0    A     AZ
# 1    A    NaN
# 2    B     AZ
# 3    B    NaN
# 4    B    NaN
# 7    D     AZ
#
#    Name System
# 11    F     AZ
# 12    F     AZ
# 13    F    NaN

最新更新