#python #pandas #dataframe
#python #pandas #фрейм данных
Вопрос:
У меня есть несколько огромных фреймов данных, которые я пытаюсь сопоставить, используя уникальные идентификаторы из одного фрейма данных в качестве основы поиска для других. Я хочу ускорить процесс, так как для завершения всего процесса требуется более 6 часов. В настоящее время я использую df[df['Column'] == 'Unique value']
метод поиска ключа в других фреймах данных, объединяя совпадения и добавляя их к новому фрейму данных. Этот процесс занимает около 0,2 секунды на запись, что, по моему мнению, немного выше. Я пытался apply.async()
использовать это как средство распараллеливания, но процесс, созданный для каждой итерации уникального ключа, занимает больше времени, чем его выполнение на одном ядре. Что я могу сделать по-другому, чтобы ускорить это?
Соответствующий фрагмент моей текущей реализации выглядит следующим образом:
def indexer(df, index):
return df[df['Column'] == 'index']
def mapping:
with Pool(processes=3) as pool:
for i in df1.iloc[:,:]['Column'].unqiue():
p1 = pool.apply_async(indexer, (df1,index,))
p2 = pool.apply_async(indexer, (df2,index,))
p3 = pool.apply_async(indexer, (df3,index,))
df1 = p1.get()
df2 = p2.get()
df3 = p3.get()
Спасибо за ваши предложения!
Комментарии:
1. Знаете ли вы о dask dataframes это API, который хорошо работает с pandas и позволяет выполнять несколько процессов. Вы также можете повысить производительность, используя eval и query
2. Я пробовал Dask, но это не привело к значительному сокращению времени вычислений. Также для eval и query я не уверен, как использовать их для поиска определенных строк в фрейме данных.