pandas groupby.apply很慢,即使在小数据集上也是如此



我想通过两个组变量聚合一个pandas DataFrame,并对每个组进行计算。因为我想混合列,所以我使用了datafframe .groupby.apply下面的代码可以工作,但速度慢得令人费解。3秒聚合4000行。当我将代码更改为一个组变量时,只需要一半的时间,可能更少一点。有人知道为什么这么慢吗?

import random
df = pd.DataFrame(np.random.rand(4000,4), columns=list('abcd'))
df['group'] = random.choices([0, 0, 1, 1],k=4000)
df["grupp"]=  random.choices([2, 3, 4, 2],k=4000)
df
def f(x):
d = {}
d['c_d_prodsum'] = (x['c'] * x['d']).sum()
return pd.Series(d, index=['c_d_prodsum'])
import time
start = time.time()
%timeit b=df.groupby(['group','grupp']).apply(f)
end = time.time()
print(end - start)

在我的机器上,它显示33.2 ms ± 2.03 ms per loop2.77作为秒数

如果您只使用pandas提供的那些函数,您将获得更好的性能。

例如…

def totime():
df['c*d'] = df['c']*df['d']
d = df.groupby(['group','grupp'])['c*d'].sum().rename('c_d_prodsum')
%timeit totime()

显示842 µs ± 3.67 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)

最新更新