擅长:python、mysql、java
<p>这既简单又高效,没有Python for循环来降低速度:</p>
<pre><code>s = pd.Series([30, 31, 32, 45, 50, 999]) # example data
s.where(s.between(*s.quantile([0.25, 0.75])), s.median())
</code></pre>
<p>它给你:</p>
<pre><code>0 38.5
1 38.5
2 32.0
3 45.0
4 38.5
5 38.5
</code></pre>
<p>打开代码包,我们有<code>s.quantile([0.25, 0.75])</code>来得到:</p>
<pre><code>0.25 31.25
0.75 48.75
</code></pre>
<p>然后,我们使用值(31.25和48.75)作为<code>between()</code>的参数,使用<code>*</code>操作符将它们解压,因为<code>between()</code>需要两个独立的参数,而不是长度为2的数组。这给了我们:</p>
<pre><code>0 False
1 False
2 True
3 True
4 False
5 False
</code></pre>
<p>现在我们有了二进制掩码,我们使用<code>s.where()</code>来选择<code>True</code>位置的原始值,否则返回到<code>s.median()</code>。你知道吗</p>