根据上面的行创建新的数据框行
我有一个包含一列(更改)的数据框。我想创建 NewColumn,它在第一行输入数字 60,之后的每一行由“Change”* NewColumn 中的前一个值 + NewColumn 中的前一个值给出。导致下面的示例数据框
Index Change NewColumn
0 0.02 60
1 -0.01 59.4
2 0.05 62.37
3 0.02 63.6174
我可以通过运行以下循环来实现这一点
df['NewColumn'] = 0.00000
for i in range(len(df)):
if i == 0:
df['NewColumn'][i] = 60
else:
df['NewColumn'][i] = df['NewColumn'][i-1] * df['Change'][i] + df['NewColumn'][i-1]
哪个工作正常,但在大型数据帧上它非常慢,所以我正在寻找任何更快的方法来做到这一点。
回答
我会Series.cumprod在修改后的更改列上使用,然后将其乘以 60 的起始值:
df = pd.DataFrame(dict(Change=[0.00, -0.01, 0.05, 0.02]))
multiplier = (df.Change + 1.0).cumprod()
df['New Column'] = multiplier * 60
df
Change New Column
0 0.00 60.0000
1 -0.01 59.4000
2 0.05 62.3700
3 0.02 63.6174
(我把第一个Change值改为零,因为不清楚第一行是什么Change意思)