Как применить несколько функций к нескольким фрагментам кадра данных? - PullRequest
0 голосов
/ 13 марта 2020

У меня есть датафрейм 500 000 строк и 3 столбца. Я хотел бы вычислить результат трех функций для каждого фрагмента из 5000 строк в кадре данных (то есть 100 фрагментов). Две из трех функций используются как определенные, а третья - это среднее значение в столбце 3.

В данный момент я сначала извлекаю фрагмент, а затем вычисляю результаты функций для этого кусок. Для среднего значения столбца 3 я использую df.iloc[:,2].compute().mean(), но другие функции выполняются за пределами dask.

Есть ли способ использовать многопоточность dask, принимая весь фрейм данных и размер фрагмента в качестве входных данных, и он выполняет те же функции, но автоматически? Это похоже на более подходящий способ использования Dask.

Кроме того, мне кажется, что это вопрос базового c dask, поэтому, если это дубликат, просто укажите мне на нужное место (я я новичок в даске, и я, возможно, еще не искал нужную вещь).

Ответы [ 2 ]

0 голосов
/ 13 марта 2020

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

df = df.repartition(npartitions=100)
a = df.map_partitions(func1)
b = df.map_partitions(func2)
c = df.map_partitions(func3)

a, b, c = dask.compute(a, b, c)
0 голосов
/ 13 марта 2020

Вы можете создать искусственный столбец для группировки индексов в эти 100 блоков.

ranges = np.arange(0, df.shape[0], 5000)
df['idx_group'] = ranges.searchsorted(df.index, side='right')

Затем используйте эту группу idx_group для выполнения ваших операций, используя pandas groupby.

ПРИМЕЧАНИЕ : Вы можете поиграть с с поиском , чтобы точно соответствовать вашим требованиям к чанам.

...