【问题标题】:Panda get value from column based on max condition to get proper cluster namesPanda 根据最大​​条件从列中获取值以获取正确的集群名称
【发布时间】:2022-01-09 17:12:52
【问题描述】:

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

     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 
...

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

【问题讨论】:

    标签: python pandas dataframe numpy max


    【解决方案1】:

    如果每个组的名称是唯一的,则在GroupBy.transform 中的每个组中,DataFrameGroupBy.idxmax 始终是唯一的组:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-26
      • 2019-04-04
      • 1970-01-01
      • 1970-01-01
      • 2022-06-28
      • 2021-11-22
      • 1970-01-01
      • 2015-02-01
      相关资源
      最近更新 更多