熊猫根据最大条件从列中获取值以获得正确的集群名称

Panda get value from column based on max condition to get proper cluster names

我已经成功地对我的数据进行了聚类,并显示了以下数据框:

     cluster_group  name value
  0              1     A    20 
  1              1     B    30 
  2              1     C    10 
  3              1     D    50 
  4              2     E    20 
  5              2     F    10 
...

我想要更好地导出,是给 cluster_group 一个名称而不是一个整数。该名称应基于具有最高值的名称列。所以结果应该是这样的:

     cluster_name  name value
  0             D     A    20 
  1             D     B    30 
  2             D     C    10 
  3             D     D    50 
  4             E     E    20 
  5             E     F    10 
...

我如何以最有效的方式做到这一点?

如果每个组的名称都是唯一的,则通过 DataFrameGroupBy.idxmax per groups in GroupBy.transform:

始终获得唯一的组
df['cluster_group'] = (df.set_index('name')
                         .groupby('cluster_group')['value']
                         .transform('idxmax')
                         .to_numpy())
print (df)
  cluster_group name  value
0             D    A     20
1             D    B     30
2             D    C     10
3             D    D     50
4             E    E     20
5             E    F     10

如果可能的话,多个相同的名字可能会相同clusters,所以应该将一些组连接在一起:

print (df)
   cluster_group name  value
0              1    A     20
1              1    E    300 <- max per group 1 is E
2              1    C     10
3              1    D     50
4              2    E     20  <- max per group 2 is E
5              2    F     10

df['cluster_group'] = (df.set_index('name')
                         .groupby('cluster_group')['value']
                         .transform('idxmax')
                         .to_numpy())
print (df)
  cluster_group name  value
0             E    A     20
1             E    E    300
2             E    C     10
3             E    D     50
4             E    E     20
5             E    F     10