Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用基于对名称的系列元素填充方形对称数据框?_Python_Pandas_Dataframe_Matrix_Symmetric - Fatal编程技术网

Python 如何使用基于对名称的系列元素填充方形对称数据框?

Python 如何使用基于对名称的系列元素填充方形对称数据框?,python,pandas,dataframe,matrix,symmetric,Python,Pandas,Dataframe,Matrix,Symmetric,在下面的空数据帧中,它是一个正方形对称矩阵 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.

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

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
如何根据
('MCD','VZ')
等配对名称从不同数据帧的最后一列(如下所示)接收相应元素,以及如何将
(i,j)
的值与
(j,i)
的值相同(因为矩阵对称)?例如,
0.263357
应该出现在
df
中的两个位置
('MCD','VZ')
('VZ','MCD')
。一个只有3个名字的玩具答案就可以了


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

您可以
透视
df添加
值+转置值(
.T

假设
df2
具有作为图片发布的数据帧结构(以下值为随机值):

输出:

          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

回答得很好。最终的结果正是我想要的。但是看着
z
本身,它出乎意料地乱成一团,不知道我在看什么,也不知道它的转置(也是随机乱成一团)如何帮助创建最终结果如果
df2
从第二张图中显示的内容更改为有两个索引(前两列):
df2.set\u index(['asset1','asset2'],inplace=True)
,我如何使
z=df2.pivot('asset1','asset2','mi')
再次工作?
z
基本上只是
df2
的透视版本(与Excel中的透视表相同),当我们
将它添加到
df
时,值按索引和列对齐,因此我们得到了与
df
中相同的索引和列顺序,关于你的
set_index
问题,我认为最简单的方法是
透视
之前重置索引,即
df2.reset_index().pivot('asset1','asset2','mi')
现在,这就是我所做的,因为在
df2
中放置了两个索引,但是,
reset\u index
行必须重复两次,因为有两个索引。有没有办法同时重置两个索引?
          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