Распараллелить операции поиска в нескольких фреймах данных

#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 я не уверен, как использовать их для поиска определенных строк в фрейме данных.