Я предлагаю использовать numpy.select
:
traindf = pd.DataFrame({'Fare':[10,15,3,30]})
m1 = traindf['Fare'] <= 13.675550
m2 = (traindf['Fare'] <= 20.662183) & (traindf['Fare'] > 13.675550)
traindf['FareBand'] = np.select([m1, m2], [1,2], 3)
print (traindf)
Fare FareBand
0 10 1
1 15 2
2 3 1
3 30 3
Ваше решение возможно изменить для выбранных значений по индексу, но не используйте его, потому что медленно:
for index, row in traindf.iterrows():
if traindf.loc[index, 'Fare'] <= 13.675550:
traindf.loc[index, 'FareBand'] = 1
elif row['Fare'] <= 20.662183 and traindf.loc[index, 'Fare'] > 13.675550:
traindf.loc[index, 'FareBand'] = 2
else:
traindf.loc[index, 'FareBand'] = 3
print (traindf)
Fare FareBand
0 10 1.0
1 15 2.0
2 3 1.0
3 30 3.0