计算依赖于上一行的值

时间:2019-08-19 00:35:20

标签: pandas

似乎cumsum,cumprod和其他累积操作无法转换。目前看来,累积操作只能在逐行循环中完成。

大约有1000万行数据,需要做跨行计算周期,计算机根本无法运行,请咨询解决方案,谢谢。 所需的计算如下:

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

1 个答案:

答案 0 :(得分:0)

如果不以C / Java样式循环,可能没有Python方式可以做到这一点。

添加:因此,只需循环即可。或使用全局变量等进行破解,如下所示:

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["temp_column"] = df["third_column"].shift(-1) 
df["third_column"] = df["temp_column"] * df["first_column"] + df["second_column"]

我提出的解决方案更容易读取,但要占用一列的内存。