熊猫创建自己的列
问题描述:
我想在熊猫中创建一个新列,但是这些值是通过引用其上方单元格中的值来计算的。我有一个名为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
谢谢!
答
溶液用循环,因为需要先前值:
for i, row in df2.iterrows():
if row['return'] == 0:
df2.loc[i, 'value'] = 100
else:
df2.loc[i, 'value'] = df2.loc[i,'return'] * df2.loc[i-1, 'value']
print (df2)
return value
0 0.000000 100.000000
1 0.997565 99.756466
2 0.998462 99.603040
3 1.004349 100.036247
4 1.001878 100.224067
其中输入依赖于先前步骤的结果计算的迭代性质复杂化矢量。你也许可以使用与循环执行相同计算的函数来应用,但在幕后,这也将是一个循环。
答
尝试:
df.return.replace(0, 100).cumprod()
谢谢!这工作,感谢您使用iterrows的课程。 – WhitneyChia
很高兴能为您提供帮助!美好的一天! – jezrael