В пандах лучше всего избегать циклов, если существует векторизованное решение:
x = pd.DataFrame([1,-2,3], columns=['a'])
y = pd.DataFrame(np.where(x['a'] > 0, x['a'] * 2, 0), columns=['b'])
print (y)
b
0 2
1 0
2 6
Пояснение :
Первый столбец сравнения по значению для логической маски:
print (x['a'] > 0)
0 True
1 False
2 True
Name: a, dtype: bool
Затем используйте numpy.where
для установки значений по условиям:
print (np.where(x['a'] > 0, x['a'] * 2, 0))
[2 0 6]
И последний раз используйте конструктор DataFrame
или создайте новый столбец:
x['new'] = np.where(x['a'] > 0, x['a'] * 2, 0)
print (x)
a new
0 1 2
1 -2 0
2 3 6