我有以下df

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


我想按groupby df 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

最佳答案

您可以在列表中使用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

关于python - Pandas 如何在分组的同时在另一列上进行分组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51786299/

10-12 16:56
查看更多