Вы можете сделать это без использования цикла с использованием ge
, что означает больше или равен и бросьте булев массив INT с помощью astype
:
In [119]:
df['Z'] = (df['X'].ge(df['Y'])).astype(int)
df
Out[119]:
ID X Y Z
0 1 10 3 1
1 2 20 23 0
2 3 21 34 0
что касается вашей попытки:
for x in data["X"]:
if x >= data["Y"]:
Data["Z"] = 1
else:
Data["Z"] = 0
это не будет работать, пихты вы используете Data
, а не data
, даже если исправить это, вы бы сравнивали скаляр с массивом, поэтому это повышало бы предупреждение, так как было бы неоднозначно сравнивать скаляр с массивом, в-третьих, вы назначаете весь столбец, чтобы переписывать колонка.
Вы должны получить доступ к метку индекса, который ваш цикл не вы можете использовать iteritems
сделать это:
In [125]:
for idx, x in df["X"].iteritems():
if x >= df['Y'].loc[idx]:
df.loc[idx, 'Z'] = 1
else:
df.loc[idx, 'Z'] = 0
df
Out[125]:
ID X Y Z
0 1 10 3 1
1 2 20 23 0
2 3 21 34 0
Но на самом деле это не нужно, поскольку есть vectorised метод здесь
Что не так с кодом? –
Может быть, изменить 'Data' на' data'? –
Пожалуйста, отредактируйте ваш вопрос и укажите, что именно вы спрашиваете. Если программа выдает ошибку, что это такое и на какой строке. Если результат неправильный, укажите, как и как он должен выглядеть. Мы не читатели разума ... – martineau