猿问

创建一个新的 pandas 列,作为另一列行的子集的结果

我正在解决一个问题,我有一个由日期,价格和每日回报组成的数据框(今天的价格/yday价格 - 1)。


                   NAV    Return

Date                            

01/01/2015  100.000000       NaN

01/02/2015   97.002676 -0.029973

01/03/2015   96.123553 -0.009063

01/04/2015   95.877838 -0.002556

01/05/2015   96.257080  0.003955

我的目标是在数据中创建另一列,即数据子集的标准偏差(5 天价值)。因此,前 5 个值为 null,但列的其余部分将包含该行和前 5 行的标准差。所以它看起来像这样:


                   NAV    Return       std

Date                                      

01/01/2015  100.000000       NaN       NaN

01/02/2015   97.002676 -0.029973       NaN

01/03/2015   96.123553 -0.009063       NaN

01/04/2015   95.877838 -0.002556       NaN

01/05/2015   96.257080  0.003955       NaN

...                ...       ...       ...

12/26/2015  101.167791 -0.000612  0.008190

12/27/2015  102.924456  0.017364  0.007941

12/28/2015  100.216064 -0.026314  0.010082

12/29/2015   98.383266 -0.018288  0.014706

12/30/2015   96.853369 -0.015550  0.015137

我想出了一种方法,通过基于if/then语句创建一个列表,但它需要很长时间才能运行。我想知道是否有更快的方法来完成这项任务,理想情况下使用矢量化。这是我想出的代码:


data = [] 

for row in range(len(df)): 

    if row < 5: 

        data.append(None) 

    else: 

        data.append(np.std(df['Return'][row-5:row]))

df['std'] = data


慕码人8056858
浏览 55回答 1
1回答

慕村9548890

您可以使用滚动:df['std']&nbsp;=&nbsp;df['Return'].rolling(6).std()
随时随地看视频慕课网APP

相关分类

Python
我要回答