У меня есть dataframe с (в данном примере), 2 строки и dataframe выглядит как это:Понимание строки итерации в панд (питон)
PERON START END
AB 100 120
CC 110 115
(То, что я хочу, но это не вопрос у меня есть, чтобы сделать новый столбец с флагом для каждой строки, если «СТАРТ» - «END», равна 20) (я также имел аналогичные проблемы в других потребительных случаях)
(я пробовал
df['New']= df.apply(lambda x: 1 if abs(df.START-df.END)==20 else 0
Я также попытался:
for i in df.iterrows():
print i[0]
if abs(df.START-df.END)==20:
print 'Legit to make be a flag'
Проблема: Каждый раз, когда я получаю сообщение «Значение истинности серии неоднозначно. Используйте a.empty, a.bool(), a.item(), a.any() или a.all().
Я понимаю, что если вы не проходите через каждую строку, python не знает для которого значение сравнивается с «if-statement», поэтому вы используете a.any(), если хотите дать флаг, если хотя бы одна строка удовлетворяет условию if-statement. a.all(), если все строки должны соответствовать строкам-условию ...
Теперь мой вопрос: Почему питон не проверяет, если-заявление на пропашной основе (конечно, в для цикла) и сохраняют это дает мне " Значение истинности серии неоднозначно. Используйте a.empty, a.bool(), a.item(), a.any() или a.All() "- Ошибка
Другая постановка вопроса: Почему питона в". для i в df.iterrows(): «все еще выполняется выражение if на всем уровне данных данных по очереди за строкой.
Поскольку в приведенном ниже коде печатается, что цикл for находится в строке ' 0' , так что я бы предположить, питон будет делать, если заявление по строке „0“. Но это не проверить, если заявление для этой строки, потому что он дает мне „неоднозначные ошибки thruth значение“ ...
for i in df.iterrows():
print i[0]
Я посмотрел на «using-if-truth-statements-with-pandas» -документацию и некоторые другие вопросы о стеке, но я не могу понять, где я ошибаюсь (маловероятно, потому что я все еще в фазе python-noob).
Вы хотите новый столбец с логическим значением (True или False), если df.START-df.END равен 20? Это вопрос? –
Вопрос в основном почему в «df.itterows, за которым следует оператор if», почему оператор if все еще выполняется на всем уровне данных данных – 5nv
Потому что это то, что вы написали. (Нет. * I * in 'if abs (df.START-df.END) == 20:') – pacholik