gpt4 book ai didi

python - 使用 ddof=1 为什么 Pandas groupby std 慢得多?

转载 作者:太空宇宙 更新时间:2023-11-04 04:46:05 24 4
gpt4 key购买 nike

我在 pandas 中发现了一些关于标准差计算 (std) 的 ddof(自由度)参数的不寻常之处。

对于常规 std,无论我将其默认值保留为 1 还是指定 0,速度都是相同的。当我将其作为 group by 的一部分执行时,速度大约慢 10 倍(我设置的测试 DataFrame 具有与我正在处理的类似的结构)。对于更多的列/行/独特的组,速度变慢更糟。

知道这里发生了什么吗? pandas 需要一些小错误修复吗?有没有办法以更快的速度复制 ddof=1 行为(我经常运行这些标准计算)?

import pandas as pd
import datetime
test = pd.DataFrame(np.random.rand(100000,10))

%timeit test.std()
100 loops, best of 3: 18.2 ms per loop
%timeit test.std(ddof=0)
100 loops, best of 3: 18.3 ms per loop

test['group'] = (test[0]*20+1).astype(int)
test['date'] = [datetime.date(2018, 3, g) for g in test['group']]
test = test.set_index(['date','group'])

%timeit test.groupby(level='date').std()
100 loops, best of 3: 6.78 ms per loop
%timeit test.groupby(level='date').std(ddof=0)
10 loops, best of 3: 68.5 ms per loop

最佳答案

这不是错误,而是一个已知问题。

下面是 groupby.py 中的一些 pandas 源代码。

  • ddof == 1:(默认值)应用了 Cythonised 算法。

  • ddof != 1:应用Python级循环。

因此,您将无法使用此方法从 pandas 内部进行优化。

@Substitution(name='groupby')
@Appender(_doc_template)
def var(self, ddof=1, *args, **kwargs):
"""
Compute variance of groups, excluding missing values

For multiple groupings, the result index will be a MultiIndex

Parameters
----------
ddof : integer, default 1
degrees of freedom
"""
nv.validate_groupby_func('var', args, kwargs)
if ddof == 1:
return self._cython_agg_general('var')
else:
self._set_group_selection()
f = lambda x: x.var(ddof=ddof)
return self._python_agg_general(f)

关于python - 使用 ddof=1 为什么 Pandas groupby std 慢得多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49552386/

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