Pandas 计算依赖于上一行的值

Pandas 计算依赖于上一行的值,pandas,Pandas,似乎cumsum、cumprod等累积运算无法转换。目前,累积运算似乎只能在逐行循环中完成 数据约10万行,需要做跨行循环计算,电脑根本无法运行,请咨询解决方案,谢谢。 所需的计算如下: for i in range(1,10000000): df.iloc[i,3] = df.iloc[i-1,3]*df[i,1]+df[i,2] 如果不以C/Java风格循环,可能没有pythonic的方法来实现它 补充:因此,只需做一个循环。或使用全局变量等进行黑客攻击,如下所示: prev_re

似乎cumsum、cumprod等累积运算无法转换。目前,累积运算似乎只能在逐行循环中完成

数据约10万行,需要做跨行循环计算,电脑根本无法运行,请咨询解决方案,谢谢。 所需的计算如下:

for i in range(1,10000000):
    df.iloc[i,3] = df.iloc[i-1,3]*df[i,1]+df[i,2]

如果不以C/Java风格循环,可能没有pythonic的方法来实现它

补充:因此,只需做一个循环。或使用全局变量等进行黑客攻击,如下所示:

prev_result = 0
def my_func(x): 
    global prev_result
    prev_result = x.a * prev_result + x.b
    return prev_result
df = pd.DataFrame({"a": [1, 2, 3], "b": [1, 2, 3]})
df["c"] = df.apply(my_func, axis=1)
# df["c"] is now [1, 4, 15]
# 0 x 1 + 1 = 1; 1 x 2 + 2 = 4; 4 x 3 + 3 = 15;
编辑:以下内容不是累积的,因此不能回答问题

也就是说,@pythonic833的解决方案:

df.shift(-1).iloc[:,3]*df.iloc[:,1]+df.iloc[:,2]
这是相当不错的一个

如果我是你,我会将df[“temp_column”]指定为df[“third_column”]。shift(-1)


我建议的解决方案更易于阅读,但要花费一列的内存

尝试
df.shift(-1).iloc[:,3]*df.iloc[:,1]+df.iloc[:,2]
谢谢,但答案不对,下一次计算依赖于上一次计算,它是递归的。哦,那么你需要一个扩展窗口函数。这会减慢进程。如果你想得到正确的答案,那么如果你用一种明确你想要什么的方式来表达你的问题,这会有所帮助。请提供示例输入和所需输出!Thaks,我试过np.array,需要3秒。正如我所说的,请用示例输入和输出更新你的问题。这使得发布一个答案更具吸引力,并降低了得到错误答案的风险。答案是错误的,递归计算,下一个计算依赖于上一个。
df["temp_column"] = df["third_column"].shift(-1) 
df["third_column"] = df["temp_column"] * df["first_column"] + df["second_column"]