Использование многопроцессорной обработки для выборки нескольких раз одного и того же Dataframe и возврата нескольких выбранных Dataframes - PullRequest
0 голосов
/ 28 июня 2019

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

1) Пока я пытался попробоватьсохранить результаты каким-либо образом (хотя я понимаю, что не имеет смысла сохранять их в списке на 100%):

import multiprocessing as mp
pool= mp.Pool(mp.cpu_count())

results = [[]]

for m in [1,2,3,4]:
    uni1 = pool.apply_async(temporary.groupby(['Customer_id','Day','Hour']).apply(lambda x: x.sample(n=1, random_state= m))['Timestamp'], callback= results)

pool.close()
pool.join()

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

2) Я также пытался

for m in [1,2,3,4]:
    uni1 = pool.apply_async(temporary.groupby(['Customer_id','Day','Hour']).apply(
    lambda x: x.sample(n=1, random_state= m ))['Timestamp'])

Но когда я могу uni1 вернуться, он возвращает мне, который японятия не имею, как превратить (в данном случае) в 4 различных кадра данных или что-то еще, с чем я могу работать

В конце мне нужно иметь конвейер из множества различных рабочих фреймов данных, которые я могу использовать, чтобы затем применить другое завершениеметоды и исследования, которые являются лучшими, принимая среднее значение всех ошибок DataFrames.Но это, конечно, означает, что я должен быть в состоянии работать с выходом этой функции выборки, что я просто не понимаю.Если кто-нибудь может помочь, я был бы очень признателен!

1 Ответ

1 голос
/ 28 июня 2019

Я немного сбит с толку относительно вашего варианта использования, но будет ли что-то вроде следующей работы? Он использует карту вместо apply_async.

def helper(variables):
    grouped, m = variables[0], variables[1]
    return grouped.apply(lambda x: x.sample(n=1, random_state=m))['Timestamp']


if __name__ == '__main__':

    from multiprocessing import Pool

    grouped = df.groupby(['Customer_id', 'Day', 'Hour'])
    p = Pool(4)
    variables = [[grouped, m] for m in [1,2,3,4]]

    results = p.map(helper, variables)

    print results

Результатом является список данных.

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