如何使用基于对名称的 Series 中的元素填充方形对称 DataFrame?

How to populate a square, symmetric DataFrame with elements from a Series based on pair names?

在下面的空DataFrame中,它是一个对称的正方形矩阵,

df = pd.DataFrame(np.zeros((6,6)), index=names, columns=names)

df 长得像

    MCD   VZ  JPM   PG  WBA  NKE
MCD  0.0  0.0  0.0  0.0  0.0  0.0
VZ   0.0  0.0  0.0  0.0  0.0  0.0
JPM  0.0  0.0  0.0  0.0  0.0  0.0
PG   0.0  0.0  0.0  0.0  0.0  0.0
WBA  0.0  0.0  0.0  0.0  0.0  0.0
NKE  0.0  0.0  0.0  0.0  0.0  0.0

如何从 一个不同的 DataFrame 的最后一列接收相应的元素,如下所示,df2.mi,根据像 ('MCD','VZ') 这样的对名,以及 (i,j)(j,i) 的相同值(因为矩阵对称)?例如,对于('MCD','VZ')('VZ','MCD')这两个地方,0.263357应该出现在df中。一个只有 3 个名字的玩具答案就可以了。

或者,根据描述的 (i,j) 规则,是否有通过 for 循环填充方形对称矩阵的通用算法?

您可以将 pivotadd 值 + 转置值 (.T) 到 df.

假设 df2 将 DataFrame 的结构发布为图片(下面的值是随机的):

z = df2.pivot('asset1', 'asset2', 'mi')
df.add(z, fill_value=0).add(z.T, fill_value=0)

输出:

          JPM       MCD       NKE        PG        VZ       WBA
JPM  0.000000  0.532617  0.322079  0.377284  0.242471  0.020071
MCD  0.532617  0.000000  0.504874  1.494942  0.737827  0.036683
NKE  0.322079  0.504874  0.000000  0.726165  0.255161  0.645917
PG   0.377284  1.494942  0.726165  0.000000  0.654995  0.593592
VZ   0.242471  0.737827  0.255161  0.654995  0.000000  0.107172
WBA  0.020071  0.036683  0.645917  0.593592  0.107172  0.000000