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