Функция Apply работает очень медленно с большим фреймворком данных (около 1 ~ 3 миллионов строк).Pandas - Объяснение о применении функции медленное
Я проверил вопросы, связанные здесь, как Speed up Pandas apply function и Counting within pandas apply() function, кажется, лучший способ ускорить его не использовать применить функцию :)
Для моего случая, у меня есть два вида задач, чтобы сделать с функцией 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,))
Второе: применять с GroupBy
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'])
Я думаю, для случая кулак, то это может быть сделано с dataframe Join, в то время как я не уверен, о стоимости ресурсов для такого объединения в большом наборе данных.
Мой вопрос:
- Есть ли способ заменить применять в двух вышеуказанных случаях?
- Почему применяется так медленно? Для случая поиска dict, я думаю, что это должно быть O (N), оно не должно стоить так много, даже если N равно 1 миллиону.
Какова ваша первая часть вопроса, которую вы пытаетесь сделать? Из определения 'f' у меня есть подозрение, что вы не делаете то, что хотите. Возможно, вы должны добавить небольшие примеры данных и ожидаемые результаты. –
Спасибо, что для первого вопроса, например, p_dict является идентификатором страны с таблицей поиска страны, я хочу запросить имя страны с идентификатором страны как входной, если нет идентификатора страны, верните NA :) – linpingta