<p>IIUC,考虑到你有以下设置</p>
<h3><code>Setup</code></h3>
<pre><code>z = io.StringIO("""
ticker CNP F GE TSLA WMT
CNP 1.000000 0.302712 0.408604 0.205812 0.289421
F 0.302712 1.000000 0.510077 0.302415 0.280815
GE 0.408604 0.510077 1.000000 0.288827 0.326106
TSLA 0.205812 0.302415 0.288827 1.000000 0.166978
WMT 0.289421 0.280815 0.326106 0.166978 1.000000""")
df = pd.read_table(z, delim_whitespace=True)
z2= io.StringIO("""
ticker vol
CNP 0.012789
F 0.014525
GE 0.011579
TSLA 0.026573
WMT 0.011369""")
df2 = pd.read_table(z2, delim_whitespace=True)
</code></pre>
<p>您可以<code>stack</code>这些值,并使用<code>map</code>来检索vol值。那就乘过去</p>
<p>{cd2>第一个</p>
^{pr2}$
<p>以至于你</p>
<pre><code> ticker other corr
0 CNP CNP 1.000000
1 CNP F 0.302712
2 CNP GE 0.408604
3 CNP TSLA 0.205812
4 CNP WMT 0.289421
5 F CNP 0.302712
6 F F 1.000000
7 F GE 0.510077
8 F TSLA 0.302415
9 F WMT 0.280815
</code></pre>
<p>然后过滤出相等的值(它们无关紧要)</p>
<pre><code>df = df[df.ticker != df.other]
</code></pre>
<p>和<code>map</code></p>
<pre><code>df2 = df2.set_index('ticker')
df['cov'] = df.ticker.map(df2.vol) * df.other.map(df2.vol) * df['corr']
</code></pre>
<p>它产生了</p>
<pre><code>df.head()
ticker other corr cov
1 CNP F 0.302712 0.000056
2 CNP GE 0.408604 0.000061
3 CNP TSLA 0.205812 0.000070
4 CNP WMT 0.289421 0.000042
5 F CNP 0.302712 0.000056
</code></pre>
<p>当然,你总是可以<code>pivot_table</code>来得到一个矩阵</p>
<pre><code>df.pivot_table(index=['ticker'], columns=['other'], values=['cov'], fill_value=1)
other CNP F GE TSLA WMT
ticker
CNP 1.000000 0.000056 0.000061 0.000070 0.000042
F 0.000056 1.000000 0.000086 0.000117 0.000046
GE 0.000061 0.000086 1.000000 0.000089 0.000043
TSLA 0.000070 0.000117 0.000089 1.000000 0.000050
WMT 0.000042 0.000046 0.000043 0.000050 1.000000
</code></pre>
<p>或者使用<code>.values</code>获得相应的<code>np.array</code></p>
<pre><code>df.pivot_table(index=['ticker'], columns=['other'], values=['cov'], fill_value=1).values
array([[ 1.00000000e+00, 5.62318492e-05, 6.05076457e-05,
6.99435817e-05, 4.20812754e-05],
[ 5.62318492e-05, 1.00000000e+00, 8.57872875e-05,
1.16723972e-04, 4.63723078e-05],
[ 6.05076457e-05, 8.57872875e-05, 1.00000000e+00,
8.88688235e-05, 4.29291322e-05],
[ 6.99435817e-05, 1.16723972e-04, 8.88688235e-05,
1.00000000e+00, 5.04454626e-05],
[ 4.20812754e-05, 4.63723078e-05, 4.29291322e-05,
5.04454626e-05, 1.00000000e+00]])
</code></pre>