从协方差的熊猫数据帧创建 numpy 协方差矩阵



我有以下熊猫。提供因子之间协方差的数据帧对象:

import pandas as pd
df = pd.DataFrame({"factor1": ["A", "A", "A", "B", "B", "C"],
"factor2": ["A", "B", "C", "B", "C", "C"],
"covar": [-1.2, -1, 2, 3.4, -4, 6.2]})

我的目标是将数据帧重新格式化为正半定协方差numpy.ndarray。

我已经开发了一个可行的解决方案,但是,它非常缓慢:

unique_factors = df.factor1.unique()
F = pd.DataFrame(columns=unique_factors, index=unique_factors)
for index, row in df.iterrows():
F.loc[row["factor1"], row["factor2"]] = row["covar"]**2
F.loc[row["factor2"], row["factor1"]] = row["covar"]**2 #inefficient
F = F.to_numpy()

其输出为:

[[1.44 1.0                4.0               ]
[1.0  11.559999999999999 16.0              ]
[4.0  16.0               38.440000000000005]]

我希望我能利用numpy的原生方法来更有效地实现我的目标。至少我希望能够删除#inefficient注释的行并反映关于对角线的上三角矩阵。任何帮助将不胜感激。

在您的情况下

s=df.pivot(*df.columns)**2
s=s.fillna(s.T)
Out[230]: 
factor2     A      B      C
factor1                    
A        1.44   1.00   4.00
B        1.00  11.56  16.00
C        4.00  16.00  38.44

最新更新