Python: использование «Применить» на фрейме данных для извлечения строк с очень медленным определенным значением столбца - PullRequest
0 голосов
/ 27 марта 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...