<p>我现在提供另一种使用<code>agg</code>函数的方法。你知道吗</p>
<p>基本上,可以通过使用df中的<code>numpy.average</code>列和<code>Weight</code>列作为参数来计算加权平均值。你知道吗</p>
<p>之后,只需使用<code>agg</code>来聚合这个<code>lambda</code>函数。你也可以用<code>apply</code>。你知道吗</p>
<p>最后,只需使用<code>join</code>将加权平均值连接回原始数据帧。你知道吗</p>
<pre><code>df["W_Ave"] = np.NaN
wave = lambda x: np.average(df.loc[x.index, "Parm1"], weights = df.loc[x.index, "Weight"])
f = {"Weighted Average": wave}
df_wave = df.groupby(['Location'])["W_Ave"].agg(wave)
del df["W_Ave"]
dffinal = df.join(df_wave, on="Location")
</code></pre>
<p>最终输出:</p>
<pre><code>dffinal
Out[38]:
Location Parm1 Test# Type Weight W_Ave
0 M36 1.39 Test1 A 233.0 1.434275
1 M36 1.44 Test2 B 281.0 1.434275
2 M36 1.40 Test3 B 239.0 1.434275
3 M36 1.49 Test4 A 438.0 1.434275
4 M36 0.99 Test5 C 112.0 1.434275
5 M36 1.74 Test6 C 200.0 1.434275
6 M36 1.17 Test7 A 100.0 1.434275
7 M36 2.40 Test8 A 7.8 1.434275
8 M37 2.91 Test1 B 232.0 4.495933
9 M37 20.20 Test2 A 0.0 4.495933
10 M37 4.88 Test3 C 958.0 4.495933
11 M37 9.46 Test4 A 0.0 4.495933
</code></pre>
<p>如果你只是对加权平均值感兴趣:</p>
<pre><code>df_wave
Out[39]:
Location
M36 1.434275
M37 4.495933
Name: W_Ave, dtype: float64
</code></pre>