2017-12-10 11 views
0

pandas.ewm.cov関数の出力をどのように使用するか。私はあなたが乗算のために返された形でそれを直接使用できるようにする関数があると推測しますが、私が試したことは何も動作していないようです。pandas.ewm.covの出力はどのように使用しますか?

たとえば、私が最小ユースケースを取ると仮定すると、XとYはDF1のtimeseriesを返します。したがって、Ewma共分散行列を推定し、次に位置AとBのポートフォリオの分散推定値を求めます)私は$ x^TC x $を計算する必要がありますが、forループを記述しないとこれを行うコマンドを見つけることができません。

# Python 3.6, pandas 0.20 
import pandas as pd 
import numpy as np 
np.random.seed(100) 
DF1 = pd.DataFrame(dict(X = np.random.normal(size = 100), Y = np.random.normal(size = 100))) 
DF2 = pd.DataFrame(dict(A = np.random.normal(size = 100), B = np.random.normal(size = 100))) 
COV = DF1.ewm(10).cov() 

print(DF1) 
print(COV) 

# All of the following are invalid 
print(COV.dot(DF2)) 
print(DF2.dot(COV)) 
print(COV.multiply(DF2)) 

答えて

0

私が把握できる最善のは...

私はこれを行うには良い方法があるという希望を差し出すコード

COV.reset_index().rename(columns = dict(level_0 = "index", level_1 = "variable"), inplace = True) 
DF2m = pd.melt(DF2.reset_index(), id_vars = "index").sort_values("index") 
MDF = pd.merge(COV, DF2m, on=["index", "variable"]) 
VAR = MDF.groupby("index").apply(lambda x: np.dot(np.dot(x["value"], np.matrix([x["X"], x["Y"]])), x["value"])[0,0]) 

のこの醜い作品です

関連する問題