擅长:python、mysql、java
<p>使用3个面具:</p>
<pre><code>sub1.loc[sub1['urbanrate']<25.0,'urban'] = 1
sub1.loc[(sub1['urbanrate']>=25.0) & (sub1['urbanrate']<75.0),'urban'] = 2
sub1.loc[sub1['urbanrate']>75.0,'urban'] = 3
</code></pre>
<p>您可以屏蔽符合布尔条件的行,并以矢量化的方式设置所有行,您尝试的操作失败的原因是:</p>
^{pr2}$
<p>在这里,您试图将数组与标量值进行比较以生成标量布尔值,但这不会起作用,另外,尽管您使用了正确的运算符将条件括在括号中<code>()</code>:</p>
<pre><code>if (data[['urbanrate']>=25.0) & (data['urbanrate']<75.0]):
return 2
</code></pre>
<p>另外,您的函数不一致,您调用了<code>apply</code>并传递了<code>axis=1</code>,这意味着您正在尝试对行值进行操作,而您的第一个条件没有问题:</p>
<pre><code>if (row['urbanrate']<25.0):
return 1
</code></pre>
<p>但是在随后的条件下,你测试的是整个{<cd4>},这是完全不同的</p>
<p>如果您执行以下操作,它会起作用:</p>
<pre><code>def urban (colData):
if colData<25.0:
return 1
if (colData>=25.0) & (colData<75.0]):
return 2
if (colData>75.0):
return 3
sub1['urban']=sub1['urbanrate'].apply(urban)
</code></pre>
<p>这里不需要按行操作,可以将整个列/系列作为参数传递给函数</p>