擅长:python、mysql、java
<p>您可以使用组合<code>groupby</code>、<code>transform</code>和{<cd3>}。请注意,我已经修改了您的示例,否则这两个部分的平均值相同。从开始</p>
<pre><code>In [21]: df
Out[21]:
Name Sex Section Price
0 Joe M 1 2.0
1 Bob M 1 NaN
2 Nancy F 2 5.0
3 Grace F 1 6.0
4 Jen F 2 10.0
5 Paul M 2 NaN
</code></pre>
<p>我们可以利用</p>
^{pr2}$
<p>生产</p>
<pre><code>In [23]: df
Out[23]:
Name Sex Section Price
0 Joe M 1 2.0
1 Bob M 1 4.0
2 Nancy F 2 5.0
3 Grace F 1 6.0
4 Jen F 2 10.0
5 Paul M 2 7.5
</code></pre>
<hr/>
<p>这是因为我们可以通过截面计算平均值:</p>
<pre><code>In [29]: df.groupby("Section")["Price"].mean()
Out[29]:
Section
1 4.0
2 7.5
Name: Price, dtype: float64
</code></pre>
<p>并将此广播回一个完整的系列,我们可以使用<code>transform</code>传递给fillna():</p>
<pre><code>In [30]: df.groupby("Section")["Price"].transform("mean")
Out[30]:
0 4.0
1 4.0
2 7.5
3 4.0
4 7.5
5 7.5
Name: Price, dtype: float64
</code></pre>