我有一个大数据框,其中包含许多子集。例如,
data = pd.read_csv(src) # I read from file
gr = data.groupby('name') # group data by some criteria
lgr = gr.groups.viewkeys() # find list key
for group in lgr: # let say I have 10000 groups
__data = gr.get_group(group)
# do somethings here
# these works take time
我想加速循环,所以我倾向于使用multi_threading。但我想知道是否有另一种方法?因为如果我像下面的代码一样使用线程,我担心许多线程会在同一时间读取gr
def run_in_thread(func):
from functools import wraps
@wraps(func)
def run(*k, **kw):
t = threading.Thread(target=func, args=k, kwargs=kw)
t.start()
return t
return run
@run_in_thread
def group_with_thread(gr, keys):
# define somethings
group_with_thread(gr, list(keys)[1:5000])
你可以给我任何建议吗?提前致谢
答案 0 :(得分:0)
我想在这里提出一个方法,它对我有用。您可以在https://github.com/josepm/MP_Pandas处查看。
多处理器group-by / apply中的基本思想是分配组 从分组到不同的CPU产生。启用 如果是Pandas group-by / apply中的多处理很有意思 在我们保留语法的意义上是通用的,我们不需要 重写一个特殊的应用函数代码。