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