首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在熊猫DataFrame中进行递归计算?

如何在熊猫DataFrame中进行递归计算?
EN

Stack Overflow用户
提问于 2022-02-19 16:35:59
回答 1查看 221关注 0票数 0

我有一个由量化投资算法产生的买卖操作的DataFrame。然后我试着用投资的初始值做一个模拟,以便在每次操作之后计算出最终的资本。

为此,我创建了一个名为“money”的新列,尝试进行递归计算。其中,“money”列的当前值为以前的值乘以操作的损益百分比。

代码语言:javascript
复制
ops_df['money'] = list( repeat(TOTAL_INVESTED, len(ops_df)) )
ops_df['money'] = (1 + ops_df.profit_perc.shift(1)) * ops_df.money.shift(1)
ops_df.head(10)

但是,没有出现预期的递归计算。我很怀疑,因为正确的归因是在归因之前计算出来的。

我设法用普通循环来解决这个计算问题,但我一直把它记在脑子里。必须有一种更好、更有表现力的方法来进行这种计算。我想知道,如果有,会是什么样子?

代码语言:javascript
复制
TOTAL_INVESTED = 1000
money = [TOTAL_INVESTED, ]

for i in range(1, len(ops_df)):
    curr_money = round( money[i-1] * (1 + ops_df.profit_perc.iloc[i]), 2 )
    money.append(curr_money)

ops_df['money'] = money

数据:

代码语言:javascript
复制
{'profit_perc': [-0.039548, 0.490518, 0.127511, -0.019439]}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-19 17:37:29

你可以用cumprod。这样做的目的是找出每一行的收益,并将其乘以初始投资:

代码语言:javascript
复制
TOTAL_INVESTED = 1000
df = pd.DataFrame({'profit_perc': [-0.039548, 0.490518, 0.127511, -0.019439]})
df['money'] = df['profit_perc'].shift(-1).add(1).cumprod().mul(TOTAL_INVESTED).shift().fillna(TOTAL_INVESTED)

输出:

代码语言:javascript
复制
   profit_perc        money
0    -0.039548  1000.000000
1     0.490518  1490.518000
2     0.127511  1680.575441
3    -0.019439  1647.906735
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71186939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档