Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据赔率为竞争者分配数字_Python_Pandas - Fatal编程技术网

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

Python 根据赔率为竞争者分配数字,python,pandas,Python,Pandas,我想根据赔率分配数字1、2或3,如下所示。所以,在13:30的时候,最受欢迎的位置A,即竞争者L将有一个获胜概率最高(几率最低)的数字1,M将有一个数字2,依此类推。我正在python中使用pandas。我使用了几个groupby函数,但没有成功。在这一点上,我将非常感谢您的帮助 | Place | Time | Contender | Odds | | :----------- | :------------ | :------------

我想根据赔率分配数字1、2或3,如下所示。所以,在13:30的时候,最受欢迎的位置A,即竞争者L将有一个获胜概率最高(几率最低)的数字1,M将有一个数字2,依此类推。我正在
python
中使用
pandas
。我使用了几个
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        |
谢谢

我认为您需要使用
min
稠密
参数,区别在于:

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

min:组中最低级别
密集型:与“min”类似,但组间排名始终增加1

df['new1']=df.groupby(['Place','Time'])['bits'].rank('min').astype(int)
df['new2']=df.groupby(['Place','Time'])['bits'].rank('dense').astype(int)
打印(df)
排名时间竞争者赔率新1新2
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
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