【问题标题】:Ranking order within groupby groupsgroupby 组内的排名顺序
【发布时间】:2023-03-27 22:09:02
【问题描述】:

假设我有以下数据框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 应用到每个组,但是没有更快/更清洁的方法吗?

【问题讨论】:

    标签: pandas pandas-groupby rank


    【解决方案1】:

    使用GroupBy.rank:

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

    【讨论】:

    • 简短评论;搞砸了的是我的数据框已经是一个聚合组,即df_grouped=df.groupby(["custid","product"])["sale"].sum()。因此我不得不再次分组,例如rank=df_grouped.groupby("custid")["sale"].rank()
    猜你喜欢
    • 2015-03-06
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 2022-10-12
    • 1970-01-01
    • 2017-01-09
    相关资源
    最近更新 更多