<p>第一次在pandas中迭代是可能的,但是非常慢,因此使用另一个矢量化的解决方案。</p>
<p>如果需要迭代,可以使用<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.iterrows.html" rel="noreferrer">^{<cd1>}</a>:</p>
<pre><code>for idx, row in df.iterrows():
if df.loc[idx,'Qty'] == 1 and df.loc[idx,'Price'] == 10:
df.loc[idx,'Buy'] = 1
</code></pre>
<p>但更好的方法是使用矢量化的解决方案-使用<code>loc</code>按布尔掩码设置值:</p>
<pre><code>mask = (df['Qty'] == 1) & (df['Price'] == 10)
df.loc[mask, 'Buy'] = 1
</code></pre>
<p>或者用<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.mask.html" rel="noreferrer">^{<cd3>}</a>的溶液:</p>
<pre><code>df['Buy'] = df['Buy'].mask(mask, 1)
</code></pre>
<p>或者如果您需要<code>if...else</code>使用<a href="http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.where.html" rel="noreferrer">^{<cd5>}</a>:</p>
<pre><code>df['Buy'] = np.where(mask, 1, 0)
</code></pre>
<p><strong>样本</strong>。</p>
<p>按条件设置值:</p>
<pre><code>df = pd.DataFrame({'Buy': [100, 200, 50],
'Qty': [5, 1, 1],
'Name': ['apple', 'pear', 'banana'],
'Price': [1, 10, 10]})
print (df)
Buy Name Price Qty
0 100 apple 1 5
1 200 pear 10 1
2 50 banana 10 1
</code></pre>
<hr/>
<pre><code>mask = (df['Qty'] == 1) & (df['Price'] == 10)
df['Buy'] = df['Buy'].mask(mask, 1)
print (df)
Buy Name Price Qty
0 100 apple 1 5
1 1 pear 10 1
2 1 banana 10 1
</code></pre>
<pre><code>df['Buy'] = np.where(mask, 1, 0)
print (df)
Buy Name Price Qty
0 0 apple 1 5
1 1 pear 10 1
2 1 banana 10 1
</code></pre>