Pandas - Объяснение медленной функции применения

Функция Apply, кажется, работает очень медленно с большим фреймом данных (около 1-3 миллионов строк).

Я проверил связанные вопросы здесь, какУскорить Панды применить функцию, а такжеПодсчет внутри панды apply () функцияПохоже, что лучший способ ускорить это - не использовать функцию «Применить» :)

В моем случае у меня есть два вида задач, связанных с функцией применения.

Во-первых: применить с поиском dict запрос

f(p_id, p_dict):
    return p_dict[p_dict['ID'] == p_id]['value']

p_dict = DataFrame(...)  # it's another dict works like lookup table
df = df.apply(f, args=(p_dict,))

Второе: применить с групповым

f(week_id, min_week_num, p_dict):
    return p_dict[(week_id - min_week_num < p_dict['WEEK']) & (p_dict['WEEK'] < week_id)].ix[:,2].mean()

f_partial = partial(f, min_week_num=min_week_num, p_dict=p_dict)
df = map(f, df['WEEK'])

Я полагаю, что в первом случае это можно сделать с помощью соединения с датафреймами, хотя я не уверен в стоимости ресурсов для такого объединения в большом наборе данных.

Мой вопрос:

Есть ли способ заменить применить в двух вышеупомянутых случаях?Почему применяется так медленно? Для случая поиска в диктовке, я думаю, это должно быть O (N), оно не должно стоить так дорого, даже если N равно 1 миллиону.

Ответы на вопрос(1)

Ваш ответ на вопрос