列与行之间的操作同时进行

2024-04-19 18:43:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个计算,我知道可能是简单的麻烦,但让我头痛。你知道吗

我有一个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\u invest和GLD\u invest列,这两个列是用前一行中的AAPL\u Dly\u rtn乘以AAPL\u invest并与自身求和,依此类推。。。你知道吗

                      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循环就可以做到这一点有任何想法,我将非常感激!你知道吗

非常感谢!!!!你知道吗


Tags: 数据pandasfordatenan头痛乘法aapl
1条回答
网友
1楼 · 发布于 2024-04-19 18:43:48

我认为这可以通过.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

相关问题 更多 >