Pandas 中的三列分组数据框

Grouping dataframe wrt three columns in 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      A
B03     IT-09     OP      A
D09     IT        OP      A
D09     IM        LP      A
D09     IM        OP      A

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

需要输出

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

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

你可以做一个双重 groupby ,在第一轮中,你 groupby “名称”将“子集”、“类型”和“系统”分组;然后再次按这些列对“名称”进行分组。

out = df.assign(Subset=df['Subset'].str[:2])\
        .sort_values(by=df.columns.tolist())\
        .groupby('Name', as_index=False)\
        .agg(**{'Subset Cluster': ('Subset', ', '.join), 
                'Type Cluster': ('Type', ', '.join), 
                'System': ('System', 'first')})\
        .groupby(['Subset Cluster', 'Type Cluster', 'System'], as_index=False)\
        .agg(', '.join)

输出:

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