更快的方法来计算基于先前行,pandas数据帧的值的行值

时间:2017-02-14 13:03:47

标签: python pandas dataframe

需要为数据帧的每一行计算表达式的值(如代码中所示)。 当前代码有效,但计算时间太长。 需要一种更快的方法来实现它。

代码:

num =0
den = 0    
for i in range(1,2000):
    p1 = p[i]
    t1 = tx[i]
    num = num * pow(numpy.e,-1*t1) + p1
    den = den * pow(numpy.e,-1*t1) + 1
    t["s"][i] = num/den

数据框中的所有值都是float数据类型 对于2000行,上面的代码大约需要80秒。 实际数据框有超过一百万行

请建议。 谢谢!

1 个答案:

答案 0 :(得分:0)

如果t是您需要评估的唯一变量,那么您不需要pow(numpy.e, -t1)

num = 0
den = 0    
for i in range(1,2000):
    p1 = p[i]
    #t1 = tx[i]
    num += p1
    den += 1
    t["s"][i] = num / den

这就足够了。

编辑:

def mytest(a, b):
    t = []
    num, den = 0, 0
    for i in range(1, 2000):
        num = num * pow(np.e, -b[i]) + a[i]
        den = den * pow(np.e, -b[i]) + 1
        t.append(num / den)
    return t

def mytest2(a, b):
    t = []
    num, den = 0, 0
    neck = pow(np.e, -b) # bottle neck
    for i in range(1, 2000):
        num = num * neck[i] + a[i]
        den = den * neck[i] + 1
        t.append(num / den)
    return t

输出:

%timeit mytest(random.rand(2000), random.rand(2000))
100 loops, best of 3: 3.26 ms per loop
%timeit mytest2(random.rand(2000), random.rand(2000))
100 loops, best of 3: 1.54 ms per loop

不幸的是,我无法重现你的(巨大的)80秒。你应该在其他地方修理。