问题描述
在下面的空 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.263357
和 df
两个地方,('MCD','VZ')
应该出现在 ('VZ','MCD')
中。一个只有 3 个名字的玩具答案就可以了。
或者,是否有根据所描述的 for
规则通过 (i,j)
循环填充方形对称矩阵的通用算法?
解决方法
您可以将 pivot
和 add
值 + 转置值 (.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