簡體   English   中英

如何索引 MultiIndex dataframe 以獲取 pandas 中的矩陣?

[英]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.rollnp.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM