可以在 pandas 中进行第一次迭代,但速度很慢,因此使用了另一种矢量化解决方案。
如果你需要迭代,我认为你可以使用iterrows:
for idx, row in df.iterrows():
if df.loc[idx,'Qty'] == 1 and df.loc[idx,'Price'] == 10:
df.loc[idx,'Buy'] = 1
但更好的是使用矢量化解决方案 - 通过布尔掩码设置值 loc:
mask = (df['Qty'] == 1) & (df['Price'] == 10)
df.loc[mask, 'Buy'] = 1
或者mask的解决方案:
df['Buy'] = df['Buy'].mask(mask, 1)
或者如果您需要if...else,请使用numpy.where:
df['Buy'] = np.where(mask, 1, 0)
样本。
按条件设置值:
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
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
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