足球运动员进入联盟标签的数据帧

2024-10-01 07:41:20 发布

您现在位置:Python中文网/ 问答频道 /正文

所以今天我要重新写这个问题,我花了一些时间试图解决它,我想我目前为止做得还不错。在

我有一个以这个为头像的足球成绩数据库(3)

      Date Season     home           visitor   FT  hgoal  vgoal  division  tier  totgoal  goaldif result
1993-04-12   1992  Arsenal       Aston Villa  0-1      0      1         1     1        1       -1      A  
1992-09-12   1992  Arsenal  Blackburn Rovers  0-1      0      1         1     1        1       -1      A  
1992-10-03   1992  Arsenal           Chelsea  2-1      2      1         1     1        3        1      H

我写了这段代码,可以:

^{pr2}$

所以现在‘tbl’很好,我可以按季节索引它。但是我很难把它变成一个多指标,先是按‘赛季’,然后是他们的总积分(下降),这就相当于他们在联赛中的排名。明确地说,我希望指数为1-20(或1-22),但指数由总点数决定。在

另外,如果有人对我如何制作桌子有任何想法,我很乐意听听。我花了很长时间尝试使用各种矢量化函数,他们告诉我这些函数效率更高,但无法使其工作,并恢复为for循环。在

谢谢你


Tags: 函数数据库homedate时间指数seasonarsenal
2条回答

我就是这样用你上面的代码让它工作的。。。在

team_count = tbl.groupby(['season'])['team'].count().tolist()
rank_column = []

for i in team_count :
    j = list(range(1,i+1,1))
    rank_column += j

tbl = tbl.sort_values(['season', 'pts', 'gd', 'gf'], ascending=[True, False, False, False])
tbl['rank'] = rank_column
tbl = tbl.set_index(['season', 'rank'])

不知道这是否是最有效的方法,但它有效吗?在

考虑使用GroupBy.rankSeries.rank通过降序pts等级来计算团队。由于我无法判断您的最终数据帧是否在赛季、团队或游戏级别,请选择适当的排名:

tbl['team_rank'] = tbl.groupby(['season', 'team'])['pts'].rank(ascending=False)

tbl['team_rank'] = tbl['pts'].rank(ascending=False)

然后在multindex的字段对上使用set_index,无需事先排序。在

^{pr2}$

但是,由于您需要多个字段来进行排序,请考虑使用reset_index,然后检索index.values以获得有序编号(+ 1,如果您不想从零开始):

tbl = tbl.sort_values(['season', 'pts', 'gd', 'gf'], 
                      ascending=[True, False, False, False]).reset_index(drop=True)
tbl['rank'] = tbl.index.values + 1
tbl = tbl.set_index(['season', 'rank'])

相关问题 更多 >