Python 为什么Pandas中的groupby().agg(list_funcs)函数使用函数列表比单独使用它们花费的时间要多得多?
对于任何数据帧df和任何随机列集合['A','B','C','D',],请考虑以下代码:Python 为什么Pandas中的groupby().agg(list_funcs)函数使用函数列表比单独使用它们花费的时间要多得多?,python,python-3.x,pandas,Python,Python 3.x,Pandas,对于任何数据帧df和任何随机列集合['A','B','C','D',],请考虑以下代码: df.groupby('A')['B', 'C', 'D'].agg(['mean', 'std', 'count']) 在这里,所有聚合函数作为一个列表一起传递 这需要的时间远远超过: grpd = df.groupby('A')['B', 'C', 'D'] grpd.agg('mean') grpd.agg('std') grpd.agg('count') 其中每个聚合函数被单独调用 这似乎有悖常
df.groupby('A')['B', 'C', 'D'].agg(['mean', 'std', 'count'])
在这里,所有聚合函数作为一个列表一起传递
这需要的时间远远超过:
grpd = df.groupby('A')['B', 'C', 'D']
grpd.agg('mean')
grpd.agg('std')
grpd.agg('count')
其中每个聚合函数被单独调用
这似乎有悖常理,因为我希望熊猫在引擎盖下做些事情来加快速度
有人能解释一下原因吗?我认为原因是,如果单独调用,那么对于相同输出的测试添加了
concat
:
np.random.seed(123)
N = 1000000
df = pd.DataFrame(np.random.randint(1000, size=(N, 4)), columns=list('ABCD'))
print (df)
In [176]: %%timeit
...: df.groupby('A')['B', 'C', 'D'].agg(['mean', 'std', 'count'])
...:
274 ms ± 7.7 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
In [177]: %%timeit
...: grpd = df.groupby('A')['B', 'C', 'D']
...: a = grpd.agg('mean')
...: b = grpd.agg('std')
...: c = grpd.agg('count')
...: pd.concat([a,b,c], axis=1)
...:
...:
190 ms ± 980 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
In [178]: %%timeit
...: grpd = df.groupby('A')['B', 'C', 'D']
...: a = grpd.mean()
...: b = grpd.std()
...: c = grpd.count()
...: pd.concat([a,b,c], axis=1)
...:
...:
191 ms ± 4.33 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)