Python 从协方差的数据帧创建numpy协方差矩阵
我有以下pandas.DataFrame对象,它提供了因子之间的协方差:Python 从协方差的数据帧创建numpy协方差矩阵,python,pandas,numpy,matrix,vectorization,Python,Pandas,Numpy,Matrix,Vectorization,我有以下pandas.DataFrame对象,它提供了因子之间的协方差: 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]}) 我的目标是将数据帧
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的本土方法更有效地实现我的目标。至少我希望能够删除注释的行#efficible
,并反映关于对角线的上三角矩阵。如果您有任何帮助,我们将不胜感激。
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
就你而言
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
这要快得多—非常感谢。我可以问一下
df.columns
前面的星号有什么作用吗?@Clade,即获取要列出的列名,并将这些信息作为索引列值传递给pivot这要快得多—非常感谢。我可以问一下df.columns
前面的星号是什么吗?@Clade,即获取要列出的列名,并将这些信息作为索引列值传递给pivot