<h2><code>pandas</code>外科手术,但速度较慢</h2>
<h2>请参阅@DSM的答案以获得更快的<code>pandas</code>解决方案</h2>
<p>这是一种更为外科手术的方法,可能提供一些视角,可能有用</p>
<ul>
<li><p>使用<code>groupyby</code></p>
<ul>
<li><p>为每个<code>Section</code>计算我们的<code>mean</code></p>
<pre><code>means = df.groupby('Section').Price.mean()
</code></pre></li>
</ul></li>
<li><p>识别空值</p>
<ul>
<li><p>使用<code>isnull</code>可用于布尔切片</p>
<pre><code>nulls = df.Price.isnull()
</code></pre></li>
</ul></li>
<li><p>使用<code>map</code></p>
<ul>
<li><p>对<code>Section</code>列进行切片,将其限制为空<code>Price</code>的行</p>
<pre><code>fills = df.Section[nulls].map(means)
</code></pre></li>
</ul></li>
<li><p>使用<code>loc</code></p>
<ul>
<li><p>只填充<code>df</code>中有空的地方</p>
<pre><code>df.loc[nulls, 'Price'] = fills
</code></pre></li>
</ul></li>
</ul>
<hr/>
<h3>一起</h3>
<pre><code>means = df.groupby('Section').Price.mean()
nulls = df.Price.isnull()
fills = df.Section[nulls].map(means)
df.loc[nulls, 'Price'] = fills
print(df)
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>