Python:在数据框上使用“应用”来检索具有特定列值的行非常慢

时间:2019-03-27 08:05:56

标签: python pandas dataframe pandas-apply

我想获取每个参与者的前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或其他方法来加快速度?

0 个答案:

没有答案