首页 > 解决方案 > 熊猫如何在聚合另一列时按组大小对groupby进行排序

问题描述

我有以下df

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

我想要by ,并按组的大小对组groupby进行排序,dfid

 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

标签: pythonpython-3.xpandasdataframepandas-groupby

解决方案


您可以将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

推荐阅读