gpt4 book ai didi

python - 为什么 groupby().agg(list_funcs) 在 Pandas 中使用函数列表比单独使用它们要花费更多的时间?

转载 作者:行者123 更新时间:2023-12-01 13:11:49 27 4
gpt4 key购买 nike

对于任何数据框 df 和任何随机的 cols ['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')

其中每个聚合函数被单独调用

这似乎违反直觉,因为我希望 Pandas 能在幕后做一些事情来让它更快。

谁能解释一下为什么?

最佳答案

我认为原因是 pandas 使用 cython optimalized code如果单独调用,为相同的输出添加 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)

关于python - 为什么 groupby().agg(list_funcs) 在 Pandas 中使用函数列表比单独使用它们要花费更多的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59468041/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com