groupby组内排序

Ranking order within groupby groups

假设我有以下数据框 df_grouped:


                     Sale
custid | product   |
-------+-----------+------
1      |   iPhone  | 3000
       |   android | 2000  
2      |   iPhone  | 1500
       |   android | 2500

并且我想要在每个组 (customerid) 中以

结尾的排名

                     Sale
custid | product   |
-------+-----------+------
1      |   iPhone  | 1
       |   android | 2
2      |   iPhone  | 2
       |   android | 1

如果我这样做 df_grouped.rank() 我得到一个全球排名


                     Sale
custid | product   |
-------+-----------+------
1      |   iPhone  | 1
       |   android | 3
2      |   iPhone  | 4
       |   android | 2

但我想要每个组内的排名。我可以遍历每个 custid 并将 rank 应用于每个组,但是没有 faster/cleaner 方法吗?

使用GroupBy.rank:

df['Rank'] = df.groupby(level='custid')['Sale'].rank()