Я хочу получить среднее значение предыдущих 3 финишных позиций каждого участника. В настоящее время я пишу, используя «Применить», чтобы пропустить его через каждого участника, но это очень медленно. Для 30 тыс. Данных требуется около 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 гонки каждого участника), но я не знаю, как я могу сделать это быстрее. Можно ли ускорить его, используя групповой или другой метод?