我想获取每个参与者的前3个终点排名的平均值。目前,我正在使用“ Apply”在每个参与者中运行它,但是速度很慢。对于30k数据,大约需要3分钟才能完成。
df_main['parti_prev3_avgposition']=''
def f(x):
try:
temp=df_main[['finishing_position','race_id','parti_id']][df_main.parti_id==x['parti_id']]
temp2=temp.loc[temp['race_id'].shift(-1)==x['race_id'],'finishing_position']
temp3=temp.loc[temp['race_id'].shift(-2)==x['race_id'],'finishing_position']
temp4=temp.loc[temp['race_id'].shift(-3)==x['race_id'],'finishing_position']
return (temp2.reset_index(drop=True)[0]+temp3.reset_index(drop=True)[0]+temp4.reset_index(drop=True)[0])/3
except:
return ''
df_main['parti_prev3_avgposition'] = df_main.apply(f, axis=1)
它可以生成我想要的结果(返回每列参与者之前3场比赛的平均排名的新列),但我不知道如何使它更快。是否可以使用groupby或其他方法来加快速度?