PythonPandas:平庸的apply语句

2024-04-26 12:41:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大约250000行的熊猫数据帧。我正在尝试创建一个新字段,如下所示:

df['new_field'] = df.apply( lambda x: x.field2 if x.field1 > 0 else 0, axis =1 )

这是可行的,但是上面的一行运行大约需要15秒!你知道吗

我这样优化:

@numba.jit(nopython=True)
def mycalc(field1, field2, out):
    for i in xrange(field1.size):
        if field1[i] > 0:
            out[i] = field2[i]
        else:
            out[i] = 0

    return out

df['new_field'] = mycalc(df.field1.as_matrix(), df.field2.as_matrix(), np.zeros(df.field1.size) )

现在需要0.25秒。你知道吗

我的问题是:有没有更好的办法?你知道吗

使用numba解决方案的时机很好,但整个方法似乎很古怪:我本希望可以在一行中高效地完成一个平庸的计算。另外,由于numba处于nopython模式,我需要在numba之外初始化输出数组并将其传递给numba,因为我知道numba无法在nopython模式下创建新数组。你知道吗

有些数据来自SQL,我用的越多,我就越觉得最好尽量用SQL,因为速度差太大了。当然,我很欣赏SQL在处理GBs的数据时会更快,但是对于25万行的普通计算来说,15秒似乎太长了。你知道吗

谢谢!你知道吗


Tags: 数据fielddfnewsqlsizeifas