<p>您可能忘记在加权平均计算中使用括号:</p>
<pre><code>> 0.93=[(0.939531370722655*3) +(0.951619897215127*2)+(1*0.952681914218488)]/(3+2+1)
</code></pre>
<p>另外,请尝试使用<code>"Value"</code>上的pivot表和自定义聚合函数:</p>
<pre><code>def func(series) :
s = series.sort_values().reset_index(drop=True).reset_index()
return s.apply(lambda x : (len(s) - x["index"]) * x["Value"] /sum(np.arange(1, len(s) + 1)), axis=1).sum()
</code></pre>
<p>上面的函数计算一系列的加权平均值:</p>
<ul>
<li>首先对值进行排序,并按排序顺序重置索引。你知道吗</li>
<li>然后计算加权平均值。你知道吗</li>
</ul>
<p>然后按如下方式调用此聚合函数:</p>
<pre><code>df1 = df.pivot_table(index="Date", columns="Source", aggfunc={"values" : func})
</code></pre>
<p>返回:</p>
<pre><code>+ + + + + -+ +
| | Value | | | | |
+ + + + + -+ +
| Source | Source1 | Source2 | Source3 | Source4 | Source5 |
| Date | | | | | |
+ + + + + -+ +
| 3/1/2018 | 0.945753 | 0.958896 | 0.963069 | 0.96348 | NaN |
| 3/2/2018 | NaN | NaN | NaN | NaN | 0.955507 |
+ + + + + -+ +
</code></pre>
<p>那么对于整个结果:</p>
<pre><code>df2 = df.pivot_table(index="Date", values="Result", aggfunc="mean")
</code></pre>
<p>退货</p>
<pre><code>+ + +
| | Result |
+ + +
| Date | |
| 3/1/2018 | 0.714286 |
| 3/2/2018 | 0.857143 |
+ + +
</code></pre>
<p>最后,您可以连接两个数据帧以获得所需的数据帧:</p>
<pre><code>df1.columns = df1.columns.droplevel()
df2.columns = ["Overall_Result" ]
dfResult = pd.concat([df1, df2], axis=1)
</code></pre>
<p>即</p>
<pre><code>+ + + + + + -+ +
| | Overall_Result | Source1 | Source2 | Source3 | Source4 | Source5 |
+ + + + + + -+ +
| Date | | | | | | |
| 3/1/2018 | 0.714286 | 0.945753 | 0.958896 | 0.963069 | 0.96348 | NaN |
| 3/2/2018 | 0.857143 | NaN | NaN | NaN | NaN | 0.955507 |
+ + + + + + -+ +
</code></pre>