Распараллеливание цикла с групповыми пандами и добавление к записи словаря

Как распараллелить этот цикл в python?

import pandas as pd

def my_func(tup):
    return {tup[0][1]: tup[1]['col3'].sum()}

arr = [['a','c',3],
        ['b','d',5],
        ['b','d',6],
        ['a','b',1],
        ['a','c',2],
        ['a','b',4]]

df = pd.DataFrame(arr, columns=['col1', 'col2', 'col3'])

return_dict = {}
for i in df.col1.unique():
    return_dict[i] = []

## Need to parallelize this loop
for group in df.groupby(['col1', 'col2']):
    return_dict[group[0][0]].append(my_func(group))      #group[0][0] == unique values in col1

print(return_dict)

Ожидаемый результат: {'a': [{'b': 5}, {'c': 5}], 'b': [{'d': 11}]}

Пробовал это, но у него нет группы[0 ][0], то есть ключ к словарю не является возвращаемым значением параллельной функции.

Я попробовал следующее, где я делаю значения col1 последовательно.

import pandas as pd
from joblib import Parallel, delayed

def my_func(tup):
    return {tup[0]: tup[1]['col3'].sum()}

arr = [['a','c',3],
        ['b','d',5],
        ['b','d',6],
        ['a','b',1],
        ['a','c',2],
        ['a','b',4]]

df = pd.DataFrame(arr, columns=['col1', 'col2', 'col3'])

return_dict = {}
for i in df.col1.unique():
    return_dict[i] = Parallel(n_jobs=-1, backend="threading")(
        map(delayed(my_func), df[df['col1']==i].groupby('col2'))
    )

print(return_dict)

Есть ли способ избежать последовательного выполнения col1? Если нет, то почему?


person user281989    schedule 29.10.2020    source источник