генерировать перестановки для большого набора данных с использованием dask и pandas

#python #pandas #dask

#python #pandas #dask

Вопрос:

У меня есть следующая структура таблицы в виде фрейма данных pandas ( df ):

 Key Value
1   A
1   B
1   C
1   D
1   E
1   F
2   A
2   G
2   C
2   F
2   B
3   X
3   Y
3   Z
  

Из этой таблицы я генерирую комбинацию всех значений для каждого ключа, используя следующую команду:

 import itertools
df_new = df.groupby('Key').apply(lambda x: pd.DataFrame(list(itertools.permutations(x['Value'],2))))
  

Это работает нормально, и я получаю правильные результаты. Однако, когда размер данных увеличивается (около 20 миллионов строк в df ), эта функция выполняется вечно.

Вот почему я попытался использовать dask :

 import dask.dataframe as dd
ddf = dd.from_pandas(df, npartitions=2)
df_new = ddf.groupby('Key').apply(lambda x: pd.DataFrame(list(itertools.permutations(x['Value'],2))))
  

Однако для запуска этого также требуется вечность.

Есть ли у вас какие-либо рекомендации о том, как я могу сделать этот процесс еще быстрее? (Также доступна опция разделения и обработки данных только для каждого ключа и сохранения всего в большом фрейме данных в конце, но, может быть, у вас, ребята, есть вариант получше?)

Спасибо.

Комментарии:

1. Краткий / простой пример ввода-вывода мог бы помочь.

2. Вы рассматриваете, каким будет конечный размер вашего набора данных в конечном итоге со всеми перестановками? Сможете ли вы разместить выходные данные в памяти даже с 20 мм строками ввода?