Python, как ссылаться на строку data_frame для параллельного выполнения - PullRequest
0 голосов
/ 04 июля 2019

Я написал простой цикл for, который повторяется в каждой строке фрейма данных.Каждая строка фрейма данных сравнивается со всеми записями второго фрейма данных (второй вход этой функции).

Теперь эта функция после некоторых сравнений и поиска возвращает обратно строки new фрейм данных, имеющий следующую структуру.

new_df=pd.DataFrame(columns=['1','2','3','4','5','6','dist','unique','occurence','timediff','id'], dtype='float')

Цикл for теперь выглядит следующим образом:

for i in range(0,small_pd.shape[0]):
    new_df=new_df.append(SequencesExtractTime(small_pd.loc[i],large_pd.loc[i]) )

Я пытаюсь найти способ запустить этот код параллельно, так как это занимает годывыполнить на одном ядре.

Я нашел пакет joblib

from joblib import Parallel, delayed
import multiprocessing

num_cores = multiprocessing.cpu_count()
print(Parallel(n_jobs=num_cores)(SequencesExtractTime(small_pd,large_pd)(i) for i in range(0,small_pd.shape[0])))

Теперь проблема состоит в том, как правильно использовать два фрейма данных, чтобы их можно было использовать из параллельного цикла.Я думаю, проблема в том, что я не знаю, как записать входные аргументы в форме, в которой они были у меня в цикле for

small_pd.loc[i]

в форме для функции Parallel.

Можете ли вы помочь мне с этой проблемой?Спасибо, Алекс

1 Ответ

1 голос
/ 05 июля 2019

Содержат ли ваши DataFrames> 1 млн строк?Если это так, выполнение сырых циклов даже параллельно будет сказываться на памяти.

Если вам действительно нужно сравнить каждую запись в столбце с 1-го и 2-го разрядов.Попробуйте вместо этого рассмотреть синтаксический анализ списка.

Таким образом, вы можете воспользоваться .intersection() или .difference() в зависимости от того, что вам нужно для фильтрации документации здесь .

Или попробуйте groupby() из панд

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