Python:在dataframe上使用“Apply”来检索某些列值非常小的行

2024-06-16 11:45:02 发布

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

我想得到每个参与者前3个完成位置的平均值。目前,我正在使用“应用程序”在每个参与者中运行它,但速度非常慢。对于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或其他方法加快速度


Tags: idtruedfindexshiftmainposition参与者