加速Pandas groupby的循环速度

时间:2015-12-23 12:41:10

标签: python multithreading pandas

我有一个大数据框,其中包含许多子集。例如,

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])
你可以给我任何建议吗?提前致谢

1 个答案:

答案 0 :(得分:0)

我想在这里提出一个方法,它对我有用。您可以在https://github.com/josepm/MP_Pandas处查看。

  

多处理器group-by / apply中的基本思想是分配组   从分组到不同的CPU产生。启用   如果是Pandas group-by / apply中的多处理很有意思   在我们保留语法的意义上是通用的,我们不需要   重写一个特殊的应用函数代码。