我想根据赔率分配数字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 |
谢谢
我认为您需要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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。