【问题标题】:How to groupby 4 columns and rank based on another column?如何对 4 列进行分组并根据另一列进行排名?
【发布时间】:2019-07-01 15:22:23
【问题描述】:

我有一个 pandas 数据框 df,其中包含源、目标和从源到目标的成本。

SRCLAT SRCLONG DESTLAT DESTLONG PRICE
43.5   47.5    103.5   104      50                
43.5   47.5    103.5   104      100                  
43.5   47.5    103.5   104      100               
43.5   30      90      80       300                 
43.5   30      90      80       400
               90      80           

我正在尝试对价格进行百分位排名,其中最高百分位是最低价格,对于具有相同源到目标坐标的行,忽略 nans

我想要的输出:

SRCLAT SRCLONG DESTLAT DESTLONG PRICE  PERCENTILE
43.5   47.5    103.5   104      50       100% (best price out of 3)         
43.5   47.5    103.5   104      100      67% (tied for 2nd out of 3)            
43.5   47.5    103.5   104      100      67% (tied for 2nd out of 3)        
43.5   30      90      80       300      100% (best out of 2)          
43.5   30      90      80       400      50% (worst out of 2)
               90      80   

我该怎么做?

我尝试用 4 列分组

df.groupby([SRCLAT, SRCLONG, DESTLAT, DESTLONG)].size()

获取每个唯一组的大小,但我不知道从哪里开始

【问题讨论】:

    标签: python pandas pandas-groupby


    【解决方案1】:

    rankmethod='max' 一起使用

    c = ['SRCLAT', 'SRCLONG', 'DESTLAT', 'DESTLONG']
    d = {'pct': True, 'ascending': False, 'method': 'max'}
    
    df.assign(PERCENTILE=df.groupby(c)['PRICE'].rank(**d))
    

       SRCLAT  SRCLONG  DESTLAT  DESTLONG  PRICE  PERCENTILE
    0    43.5     47.5    103.5       104     50    1.000000
    1    43.5     47.5    103.5       104    100    0.666667
    2    43.5     47.5    103.5       104    100    0.666667
    3    43.5     30.0     90.0        80    300    1.000000
    4    43.5     30.0     90.0        80    400    0.500000
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-01
      • 2019-12-31
      • 1970-01-01
      • 2022-01-18
      • 2015-10-29
      • 2019-02-25
      • 2020-12-21
      相关资源
      最近更新 更多