开发者社区> 问答> 正文

根据赔率为竞争者分配数字

我想根据赔率分配数字1、2或3,如下所示。这样,在时间13:30的位置A上的最爱(即竞争者L)将有一个最高的获胜概率(最低几率),而号码M会得到一个2,依此类推。我使用pandas在python。我使用了几个groupby功能,但没有成功。在此感谢您的帮助。

| Place        |  Time         | Contender      | Odds       |
| :----------- | :------------ | :------------- | :--------- |
|     A        |       13:30   | L              | 2.5        |
|     A        |       13:30   | M              | 4.5        |
|     A        |       13:30   | N              | 5.5        |
|     B        |       13:40   | X              | 1.5        |
|     B        |       13:40   | Y              | 3.5        |
|     B        |       13:40   | Z              | 6.5        |
|     D        |       13:50   | T              | 5.5        |
|     D        |       13:50   | S              | 6.5        |
|     D        |       13:50   | P              | 1.5        |

谢谢

展开
收起
几许相思几点泪 2019-12-29 19:49:22 927 0
1 条回答
写回答
取消 提交回答
  • 我认为您需要GroupBy.rank使用min或dense参数,区别是:

    方法:{'average','min','max','first','dense'},默认为'average'

    min:组中的最低排名 密密麻麻:类似于“ min”,但组之间的排名始终增加1

    df['new1'] = df.groupby(['Place','Time'])['Odds'].rank('min').astype(int)
    df['new2'] = df.groupby(['Place','Time'])['Odds'].rank('dense').astype(int)
    print (df)
      Place   Time Contender  Odds  new1  new2
    0     A  13:30         L   2.5     1     1
    1     A  13:30         M   4.5     3     2
    2     A  13:30         N   2.5     1     1 <-changed 5.5 to 2.5 for see difference
    3     B  13:40         X   1.5     1     1
    4     B  13:40         Y   3.5     2     2
    5     B  13:40         Z   6.5     3     3
    6     D  13:50         T   5.5     2     2
    7     D  13:50         S   6.5     3     3
    8     D  13:50         P   1.5     1     1
    
    2019-12-29 19:49:39
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
以始为终的产品设——计互联网消费金融与大数据技术应用 立即下载
区域性银行数字新生态建设研究 立即下载
城市的数字使命 立即下载