[英]How index MultiIndex dataframe to get matrices in pandas?
我有這個原始的df
有 2 只股票和它們連續 5 個交易日的回報。
d = {'1': [-0.015, 0.026, 0.031, 0.012, 0.045], '2': [-0.011, 0.032, -0.007, -0.007, 0.012]}
df = pd.DataFrame(data = d)
df.index.name = 'Ticker #'
df
Ticker # 1 2
0 -0.015 -0.011
1 0.026 0.032
2 0.031 -0.007
3 0.012 -0.007
4 0.045 0.012
然后我為df
的協方差矩陣創建了一個滾動 windows ,存儲在df2
中:
df2 = df.rolling(2).cov().dropna()
df2
1 2
Ticker #
1 1 8.405000e-04 8.815000e-04
2 8.815000e-04 9.245000e-04
2 1 1.250000e-05 -9.750000e-05
2 -9.750000e-05 7.605000e-04
3 1 1.805000e-04 -1.084202e-19
2 -1.084202e-19 1.355253e-20
4 1 5.445000e-04 3.135000e-04
2 3.135000e-04 1.805000e-04
我想將從每個滾動 window 創建的每個矩陣乘以二維數組arr
,其中:
arr = np.array([[1, 2], [3, 4], [5,6], [7,8]])
並且公式是formula = arr.T*df2*arr
我希望它產生一個包含 4 個值的數組。 如何子集或索引 df2 以便我可以將每個矩陣元素乘以其對應的數組元素?
要獲取個人矩陣,您可以使用pd.roll和np.cov ,例如:
import pandas as pd
import numpy as np
d = {'1': [-0.015, 0.026, 0.031, 0.012, 0.045],
'2': [-0.011, 0.032, -0.007, -0.007, 0.012]}
df = pd.DataFrame(data=d)
df.index.name = 'Ticker #'
np_res = pd.DataFrame(np.vstack([np.cov(roll.T) for roll in df.rolling(2)])).dropna()
pd_res = df.rolling(2).cov().dropna()
print(np.allclose(np_res, pd_res))
Output
True
要乘以數組,請執行以下操作:
arr = np.array([[1, 2], [3, 4], [5,6], [7,8]])
def multiply(c, a):
if np.isnan(c).any():
return c
return (c @ a.T) @ a
res = pd.DataFrame(np.vstack([multiply(np.cov(roll.T), arr) for roll in df.rolling(2)]))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.