#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 мм строками ввода?