我对多重处理非常陌生,但是发现自己需要使用它来对同一只熊猫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个不同的数据框或其他我可以使用的东西
最后,我需要一个包含许多不同可用DataFrame的管道,然后可以使用它们应用不同的完成方法,并通过取所有DataFrame错误的平均值来研究最佳方法。但这当然意味着我必须能够处理这个采样函数的输出,而我只是做得不好。如果有人可以帮助我,我将非常感激!
答案 0 :(得分:1)
对于您的用例,我有些困惑,但是下面的方法会起作用吗?它使用map而不是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
结果是数据帧列表。