2017-08-16 229 views
0

我有一个函数来计算月收益给出的月度回报率:计算年度标准差,在熊猫

def monthlyreturns(df): 
    first = df.resample('M').first().to_period('M') 
    last = df.resample('M').last().to_period('M') 
    return ((last-first)/first) * 100 

,所得到的DF从monthlyreturns(股票):

  FOX  FOXA  MMM 
Date 
2012-01 5.4  3.2  -.08 
2012-02 .07  1.2  -.62 
... 
2017-08 -.2  -4.2  2.3 

我的问题是 - 我如何计算每年的标准差?我的预期产出将保持在相同的格式DF(在列的股票,以及日期为指标),但计算出每年的标准偏差,给出的月度回报率(所以应该有EA股票约7个值)

到目前为止,我曾尝试:

sd = pd.DataFrame() 
x = -13 
y = -1 
for date in reversed(periods):      #where periods is ea year 
    sd[date] = np.std(monthly_returns.iloc[x:y])  
x -= 12 
y -= 12 
if x < -72: 
    break 

这工作 - 但日期和列交换,并想知道是否有一个更干净的代码来做到这一点

+0

当你将一个循环应用到一个熊猫物体时,在99%的情况下你做错了。 – DyZ

+0

我知道那里有一个这样的班轮,我不知道index.year部分 - 谢谢你 –

回答

1
monthly_returns.groupby(monthly_returns.index.year).std() 

对于示例:

#   FOX  FOXA  MMM 
#2012 3.768879 1.414214 0.381838 
#2017  NaN  NaN  NaN