我有这样一个数据帧:
Open High Low Close Volume MA Status Portfolio
Date
1958-03-12 42.41 42.41 42.41 42.41 2688889.0 41.3016 1.0 100.0
1958-03-13 42.46 42.46 42.46 42.46 3144444.0 41.3442 1.0 NaN
1958-03-14 42.33 42.33 42.33 42.33 2388889.0 41.3734 1.0 NaN
1958-03-17 42.04 42.04 42.04 42.04 2366667.0 41.4006 1.0 NaN
1958-03-18 41.89 41.89 41.89 41.89 2300000.0 41.4184 1.0 NaN
1958-03-19 42.09 42.09 42.09 42.09 2677778.0 41.4404 1.0 NaN
1958-03-20 42.11 42.11 42.11 42.11 2533333.0 41.4676 1.0 NaN
1958-03-21 42.42 42.42 42.42 42.42 2700000.0 41.5086 1.0 NaN
1958-03-24 42.58 42.58 42.58 42.58 2866667.0 41.5504 1.0 NaN
如果“状态”等于1,我想将“投资组合”列计算为前一天的价值加上当天的回报。我有这样一句话:
spx_daily.loc['1958-03-13':].loc[spx_daily['Status'] == 1, 'Portfolio'] = ((spx_daily.Close / spx_daily.Close.shift(1))) * spx_daily.Portfolio.shift(1)
但是,当我运行代码时,输出是这样的:
Open High Low Close Volume MA Status Portfolio
Date
1958-03-12 42.41 42.41 42.41 42.41 2688889.0 41.3016 1.0 100.000000
1958-03-13 42.46 42.46 42.46 42.46 3144444.0 41.3442 1.0 100.117897
1958-03-14 42.33 42.33 42.33 42.33 2388889.0 41.3734 1.0 NaN
1958-03-17 42.04 42.04 42.04 42.04 2366667.0 41.4006 1.0 NaN
1958-03-18 41.89 41.89 41.89 41.89 2300000.0 41.4184 1.0 NaN
1958-03-19 42.09 42.09 42.09 42.09 2677778.0 41.4404 1.0 NaN
1958-03-20 42.11 42.11 42.11 42.11 2533333.0 41.4676 1.0 NaN
1958-03-21 42.42 42.42 42.42 42.42 2700000.0 41.5086 1.0 NaN
1958-03-24 42.58 42.58 42.58 42.58 2866667.0 41.5504 1.0 NaN
只计算了第一行。这是因为操作“一次完成”并且剩余的行被检测为nan吗?你知道吗
我应该如何解决这个问题,同时避免对行进行迭代?你知道吗
使用^{} +^{}
我每天都用df代替spx\u。 我只是想让你明白这个想法
检查状态==0的单行:
相关问题 更多 >
编程相关推荐