假设该表名为df,第一列标记为A,第二列为B,相关值标记为Correlation:
df2 = df.pivot(index='A', columns='B', values='Correlation')
>>> df2
B 1 2 3 4 5
A
2 -0.0798 NaN NaN NaN NaN
3 0.3580 -0.406 NaN NaN NaN
4 0.2880 -0.129 0.157 NaN NaN
5 -0.0756 0.479 -0.378 -0.265 NaN
6 0.0909 -0.364 0.482 0.293 -0.74
要将其转换为对角线中的对称方形矩阵:
# Get a unique list of all items in rows and columns.
items = list(df2)
items.extend(list(df2.index))
items = list(set(items))
# Create square symmetric correlation matrix
corr = df2.values.tolist()
corr.insert(0, [np.nan] * len(corr))
corr = pd.DataFrame(corr)
corr[len(corr) - 1] = [np.nan] * len(corr)
for i in range(len(corr)):
corr.iat[i, i] = 1. # Set diagonal to 1.00
corr.iloc[i, i:] = corr.iloc[i:, i].values # Flip matrix.
# Rename rows and columns.
corr.index = items
corr.columns = items
>>> corr
1 2 3 4 5 6
1 1.0000 -0.0798 0.358 0.288 -0.0756 0.0909
2 -0.0798 1.0000 -0.406 -0.129 0.4790 -0.3640
3 0.3580 -0.4060 1.000 0.157 -0.3780 0.4820
4 0.2880 -0.1290 0.157 1.000 -0.2650 0.2930
5 -0.0756 0.4790 -0.378 -0.265 1.0000 -0.7400
6 0.0909 -0.3640 0.482 0.293 -0.7400 1.0000
如果std dev数据尚未以矩阵形式存在,请执行相同的步骤.
假设此矩阵名为df_std,那么您可以获得协方差矩阵,如下所示:
df_cov = corr.multiply(df_std.multiply(df_std.T.values))