代码之家  ›  专栏  ›  技术社区  ›  daiyue

pandas如何在聚合到另一列时按组大小对group by排序

  •  2
  • daiyue  · 技术社区  · 6 年前

    我有以下的 df ,

    id    amount
    1     20
    2     8
    1     3
    1     2
    2     7
    

    我想 groupby 这个 数据框 通过 id ,并按大小对组进行排序,

     df.groupby('id').size().sort_values(ascending=False)
    

    但也聚集在 amount 创建一个单独的列 total 同时,

    id    amount    total    size
    1     20         25       3
    1     3          25       3
    1     2          25       3
    2     8          15       2
    2     7          15       2
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   jpp    6 年前

    你可以用 GroupBy + agg 有一个列表,然后是 pd.merge :

    g = df.groupby('id')['amount'].agg(['size', 'sum'])
    
    res = pd.merge(df, g, left_on='id', right_index=True)\
            .sort_values('size', ascending=False)
    
    print(res)
    
       id  amount  size  sum
    0   1      20     3   25
    2   1       3     3   25
    3   1       2     3   25
    1   2       8     2   15
    4   2       7     2   15