熊猫如何在分组的同时在另一列上进行分组

时间:2018-08-10 12:13:54

标签: python python-3.x pandas dataframe pandas-groupby

我有以下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

1 个答案:

答案 0 :(得分:3)

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