Python 基于上一行的值计算行值的更快方法,如dataframe

Python 基于上一行的值计算行值的更快方法,如dataframe,python,pandas,dataframe,Python,Pandas,Dataframe,需要为数据帧的每一行计算表达式的值(如代码中所示)。 当前代码可以工作,但是计算时间太长。 需要一种更快的方法来实现同样的功能 代码: 数据帧中的所有值都是浮点数据类型 对于2000行,上面的代码大约需要80秒。 实际数据帧有超过一百万行 请建议。 谢谢 如果t是需要计算的唯一变量,则不需要pow(numpy.e,-t1) 这就足够了 编辑: 输出: %timeit mytest(random.rand(2000), random.rand(2000)) 100 loops, best of 3

需要为数据帧的每一行计算表达式的值(如代码中所示)。 当前代码可以工作,但是计算时间太长。 需要一种更快的方法来实现同样的功能

代码:

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

请建议。
谢谢

如果
t
是需要计算的唯一变量,则不需要
pow(numpy.e,-t1)

这就足够了

编辑:

输出:

%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秒。你应该去别的地方修理。

谢谢!,我遵循了您的方法,在我的代码中,t[“s”][i]=num/den非常耗时。现在保存到列表中,然后附加到数据帧。工作得更快。
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