似乎cumsum,cumprod和其他累积操作无法转换。目前看来,累积操作只能在逐行循环中完成。
大约有1000万行数据,需要做跨行计算周期,计算机根本无法运行,请咨询解决方案,谢谢。 所需的计算如下:
for i in range(1,10000000):
df.iloc[i,3] = df.iloc[i-1,3]*df[i,1]+df[i,2]
答案 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"]
我提出的解决方案更容易读取,但要占用一列的内存。