我遇到一个问题,我知道这可能很简单,但让我很头疼。
我有一个pandas数据帧,我想生成一个列,其中包含同一行中的一个值和一个行中的一个值 - 1,此外,我想在行中加一个值 - 1并将其放入实际行。到目前为止,我有这个:
AAPL GLD AAPL_cumu_rtn GLD_cumu_rtn AAPL_Dly_rtn \
Date
2011-01-03 329.570000 138.000000 100.000000 100.000000 NaN
2011-01-04 331.290012 134.750000 100.521896 97.644928 0.005219
2011-01-05 334.000008 134.369995 101.344178 97.369562 0.008180
2011-01-06 333.729988 133.830002 101.262247 96.978262 -0.000808
2011-01-07 336.120003 133.580002 101.987439 96.797103 0.007162
GLD_Dly_rtn AAPL_invest GLD_invest
2011-01-03 NaN 650000.0 350000.0
2011-01-04 -0.023551 0.0 0.0
2011-01-05 -0.002820 0.0 0.0
2011-01-06 -0.004019 0.0 0.0
2011-01-07 -0.001868 0.0 0.0
我想填写APPL_invest和GLD_invest列,这些列是前一行中AAPL_invest乘以AAPL_Dly_rtn并与自身相加等等......
AAPL GLD AAPL_cumu_rtn GLD_cumu_rtn AAPL_Dly_rtn \
Date
2011-01-03 329.570000 138.000000 100.000000 100.000000 NaN
2011-01-04 331.290012 134.750000 100.521896 97.644928 0.005219
2011-01-05 334.000008 134.369995 101.344178 97.369562 0.008180
2011-01-06 333.729988 133.830002 101.262247 96.978262 -0.000808
2011-01-07 336.120003 133.580002 101.987439 96.797103 0.007162
GLD_Dly_rtn AAPL_invest GLD_invest
2011-01-03 NaN 650000.0 350000.0
2011-01-04 -0.023551 653392.3 341757.1
2011-01-05 -0.002820 658737.1 340793.3
2011-01-06 -0.004019 0.0 0.0
2011-01-07 -0.001868 0.0 0.0
如果有人对如何在不使用for循环的情况下做到这一点有任何想法,我会赞成!
非常感谢!!!!
答案 0 :(得分:1)
我认为可以使用.cumprod
完成此操作。
例如,如果我们选择(df['GLD_Dly_rtn'] + 1).fillna(1)
然后使用.cumprod()
。我们将收益标准化,然后可以简单地乘以初始投资,因此对于黄金来说,这将是。
df['GLD_total'] = (df['GLD_Dly_rtn'] + 1).fillna(1).cumprod() * 350000
此处的fillna部分仅用于填充初始NaN。
结果是:
0 350000.000000
1 341757.150000
2 340793.394837
3 339423.746183
4 338789.702625
这可能有更整洁或更普遍的方式,但我现在无法想到它
编辑:
我刚刚意识到您已在数据框中拥有累积返回列,因此您只需使用:
df['GLD_total'] = (df['GLD_cumu_rtn'] / 100) * 350000