第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用于投資組合 beta 的 groupby rolling agg 自定義函數(shù)

用于投資組合 beta 的 groupby rolling agg 自定義函數(shù)

青春有我 2022-12-06 14:41:58
Beta 是衡量投資組合系統(tǒng)性風(fēng)險的指標(biāo)。它的計算方法是將投資組合回報率與基準(zhǔn)/市場的協(xié)方差除以市場方差。我想根據(jù)許多投資組合滾動計算。我有一個 df 如下PERIOD,PORT1,PORT2,BM201504,-0.004,-0.001,-0.013201505,0.017,0.019,0.022201506,-0.027,-0.037,-0.039201507,0.026,0.033,0.017201508,-0.045,-0.054,-0.081201509,-0.033,-0.026,-0.032201510,0.053,0.07,0.09201511,0.03,0.032,0.038201512,-0.05,-0.034,-0.044201601,-0.016,-0.043,-0.057201602,-0.007,-0.007,-0.011201603,0.014,0.014,0.026201604,0.003,0.001,0.01201605,0.046,0.038,0.031除了更多列,如 port1 和 port2。我想創(chuàng)建一個與 BM 列相比具有滾動 beta 的數(shù)據(jù)集。我創(chuàng)建了一個類似的滾動相關(guān)數(shù)據(jù)集df.rolling(3).corr(df['BM'])...它獲取了我的大集合中的每一列,并計算了與我的 BM 列的相關(guān)性。我試圖為 Beta 制作一個自定義函數(shù),但因為它需要兩個參數(shù),所以我很掙扎。下面是我的自定義函數(shù),以及我是如何通過向它提供兩列返回值來讓它工作的。    def beta(arr1,arr2):    #ddof = 0 gives population covar. the 0 and 1 coordinates take the arr1 vs arr2 covar from the matrix    return (np.cov(arr1,arr2,ddof=0)[0][1])/np.var(arr2)    beta_test = beta(df['PORT1'],df['BM'])所以這有助于我找到我輸入的兩列之間的 beta...問題是如何對我上面的數(shù)據(jù)和包含許多列/投資組合的數(shù)據(jù)執(zhí)行此操作?然后如何在滾動的基礎(chǔ)上做到這一點?從我上面看到的相關(guān)性來看,下面應(yīng)該是可能的,在每一列與一個指定列中運行每個滾動的 3 個月數(shù)據(jù)集。beta_data = df.rolling(3).agg(beta(df['BM']))任何指向正確方向的指針將不勝感激
查看完整描述

2 回答

?
拉莫斯之舞

TA貢獻1820條經(jīng)驗 獲得超10個贊

IIUC,你可以set_index使用 PERIOD 和 BMfilter列,其中包含 PORT 的列(如果你有其他列你不想應(yīng)用該beta功能),然后rolling.apply像這樣使用:


print (df.set_index(['PERIOD','BM']).filter(like='PORT')

         .rolling(3).apply(lambda x: beta(x, x.index.get_level_values(1)))

         .reset_index())

    PERIOD     BM     PORT1     PORT2

0   201504 -0.013       NaN       NaN

1   201505  0.022       NaN       NaN

2   201506 -0.039  0.714514  0.898613

3   201507  0.017  0.814734  1.055798

4   201508 -0.081  0.736486  0.907336

5   201509 -0.032  0.724490  0.887755

6   201510  0.090  0.598332  0.736964

7   201511  0.038  0.715848  0.789221

8   201512 -0.044  0.787248  0.778703

9   201601 -0.057  0.658877  0.794949

10  201602 -0.011  0.412270  0.789567

11  201603  0.026  0.354829  0.690573

12  201604  0.010  0.562924  0.558083

13  201605  0.031  1.716066  1.530471


查看完整回答
反對 回復(fù) 2022-12-06
?
胡子哥哥

TA貢獻1825條經(jīng)驗 獲得超6個贊

def getbetas(df, market, window = 45):

    """ given an unstacked pandas dataframe (columns instruments, rows

    dates), compute the rolling betas vs the market.

    """

    nmarket = market/market.rolling(window).var()

    thebetas = df.rolling(window).cov(other=nmarket)

    return thebetas


查看完整回答
反對 回復(fù) 2022-12-06
  • 2 回答
  • 0 關(guān)注
  • 237 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號