Python 我对groupby应用了sum(),并希望对最后一列的值进行排序

Python 我对groupby应用了sum(),并希望对最后一列的值进行排序,python,sorting,pandas,sum,pandas-groupby,Python,Sorting,Pandas,Sum,Pandas Groupby,给定以下数据帧 user_ID product_id amount 1 456 1 1 87 1 1 788 3 1 456 5 1 87 2 ... ... ... 第一列是客户的ID,第二列是他购买的产品的ID,如果当天购买的产品数量(日期也被考虑在内),则表示“金额”。一个

给定以下数据帧

user_ID  product_id  amount
   1       456          1
   1        87          1
   1       788          3
   1       456          5
   1        87          2
  ...      ...         ...
第一列是客户的ID,第二列是他购买的产品的ID,如果当天购买的产品数量(日期也被考虑在内),则表示“金额”。一个顾客每天可以想买多少就买多少。 我想计算每个产品被客户购买的总次数,因此我应用了
groupby

df.groupby(['user_id','product_id'], sort=True).sum()
现在我想对每组的金额总和进行排序。
有什么帮助吗?

假设
df
是:

     user_ID  product_id  amount
0        1         456       1
1        1          87       1
2        1         788       3
3        1         456       5
4        1          87       2
5        2         456       1
6        2         788       3
7        2         456       5
然后您可以像以前一样使用,
groupby
sum
,此外,您还可以按两列对值进行排序
[用户ID,金额]
升序=[真,假]
表示用户的升序和每个用户金额的降序:

new_df = df.groupby(['user_ID','product_id'], sort=True).sum().reset_index()
new_df = new_df.sort_values(by = ['user_ID', 'amount'], ascending=[True,False])
print(new_df)
输出:

     user_ID   product_id  amount
1        1         456       6
0        1          87       3
2        1         788       3
3        2         456       6
4        2         788       3

您还可以使用
aggregate()

输出:

   product_id user_ID amount
1           2       1      3
2           4       1      2
3           6       1      1
4           9       1      5
5           1       2      5
6           3       2      9
7           8       2      1
8          10       2      5
9           2       3      5
10          3       3      5
11          4       3      5
12          5       3      3
13          8       3      5
14          3       4      3
15          4       4      9
16          5       4      2
17         10       4      1
18          2       5      1
19          4       5      4
20          5       5      2
21         10       5      2

这将为您提供最大的前五名:

# n  = number of rows you want to return
df.groupby(['user_id'])['amount'].sum().nlargest(n)
# n  = number of rows you want to return
df.groupby(['user_id'])['amount'].sum().nlargest(n)