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

问题描述

在下面的空 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')这样的pair-names,以及place (i,j) 的值与 (j,i) 的值相同(因为矩阵对称)?例如,对于 0.263357df 两个地方,('MCD','VZ') 应该出现在 ('VZ','MCD') 中。一个只有 3 个名字的玩具答案就可以了。

enter image description here

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

解决方法

您可以将 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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...