<pre><code>import numpy as np
import pandas as pd
</code></pre>
<h2>定义变量</h2>
^{pr2}$
<p>为了计算每日收益,我使用<code>.shift</code>运算符</p>
<pre><code># Calculate the daily returns for each security
df_ret = np.log( df2 / df2.shift(1) )
# FX OGDC PIB WTI
# Date
# 2010-03-01 NaN NaN NaN NaN
# 2010-03-02 0.000443 0.006928 0.000000 0.012375
# 2010-03-03 -0.000690 -0.007873 0.000171 0.014824
# 2010-03-04 -0.001354 0.001545 0.000007 -0.008195
# 2010-03-05 -0.001578 0.008796 -0.000164 0.015955
</code></pre>
<p>您需要将<code>wgt</code>的<code>Weight</code>列与<code>ret</code>相乘以得到所需的结果。<code>wgt['Weight']</code>将返回一个<code>pd.Series</code>,它更像是一个一维数组,而不是一个可以被普遍认为是<code>pd.DataFrame</code>的二维数组。在</p>
<pre><code>df_wgt_ret = wgt['Weight'] * df_ret
# FX OGDC PIB WTI
# Date
# 2010-03-01 NaN NaN NaN NaN
# 2010-03-02 0.000081 0.003705 0.000000e+00 0.001880
# 2010-03-03 -0.000126 -0.004210 2.242285e-05 0.002252
# 2010-03-04 -0.000247 0.000826 8.609014e-07 -0.001245
# 2010-03-05 -0.000287 0.004704 -2.156434e-05 0.002424
</code></pre>
<p>对列求和(轴=1)得到投资组合回报。注意这将返回一个<code>pd.Series</code>而不是一个数据帧</p>
<pre><code>port_ret = df_wgt_ret.sum(axis=1)
# Date
# 2010-03-01 NaN
# 2010-03-02 0.005666
# 2010-03-03 -0.002061
# 2010-03-04 -0.000664
# 2010-03-05 0.006820
</code></pre>
<p>最后,将衰减率乘以投资组合,注意因为操作发生在需要的列上</p>
<pre><code>total_ret = (port_ret * sr_dec).sum()
final_res = total_ret**0.5
</code></pre>
<h2>唯一的班轮</h2>
<p>我假设<code>decFac</code>是一个列名为<code>decFac</code>的数据帧,并使用您定义的<code>df3</code>和{<cd4>}。在</p>
<pre><code>result = (( (df3.Weight * ret).sum(axis=1)**2 * decFac.decFac ).sum())**.5
</code></pre>