pandas创建列引用本身

时间:2016-11-17 05:28:20

标签: python pandas

我想在pandas中创建一个新列,但计算的值是引用它上面单元格中的值。我有一个名为returns的列,基本上该值应该是前一行的return *值。

从概念上讲,我认为它应该是这样的,但这不起作用,我不知道如何得到它。

df2['value'] = [100 if x == 0 else x * y for x, y in zip(df2['return'], df2['value'].shift(1))]

所以,数据看起来像这样:

return
0
0.99756466142691
0.99846199238689
1.004349336899
1.0018775199783

我想要这个:

return          value
0.0000000000    100.0000000000
0.9975646614    99.7564661427
0.9984619924    99.6030399383
1.0043493369    100.0362471152
1.0018775200    100.2240671677

谢谢!

3 个答案:

答案 0 :(得分:2)

解决方案是循环,因为需要以前的值:

{{1}}

输入依赖于先前步骤的结果的计算的迭代性质使矢量化复杂化。你也许可以使用apply和一个与循环进行相同计算的函数,但在幕后这也是一个循环。

答案 1 :(得分:2)

您要求的是累积产品。挑战在于您如何安排初始作品 注意: 这是一个不需要循环的矢量化解决方案。

df['value'] = df['return'].add(df['return'].eq(0)).cumprod().mul(100)
df

enter image description here

答案 2 :(得分:1)

尝试:

df.return.replace(0, 100).cumprod()