Синтаксическая ошибка для лямбда-функции с использованием панд

#python #lambda #syntax #syntax-error

Вопрос:

Почему происходит следующее SyntaxError ?

 data['Direction'] = lambda x : 'up' if data['Rolling'].shift(1) < data['Rolling'] else ('down' if data['Rolling'].shift(1) > data['Rolling'])
 

Комментарии:

1. в чем заключается ошибка? (полный текст важен)

2. Вы упускаете else часть для второго if . Но это тоже не сделает того, чего ты хочешь.

Ответ №1:

Ты получил по SyntaxError заслугам ('down' if data['Rolling'].shift(1) > data['Rolling']) . Если вы хотите, чтобы функция возвращала 'up' if data['Rolling'].shift(1) < data['Rolling'] и 'down ‘ в противном случае ( data['Rolling'].shift(1) >= data['Rolling'] ), вы можете сделать:

 lambda x : 'up' if data['Rolling'].shift(1) < data['Rolling'] else 'down'
 

Или , если вы также хотите, чтобы функция возвращала None время data['Rolling'].shift(1) == data['Rolling'] , вы можете сделать:

 lambda x : 'up' if data['Rolling'].shift(1) < data['Rolling'] else ('down' if data['Rolling'].shift(1) > data['Rolling'] else None)
 

Комментарии:

1. Это нормально, если бы я просто хотел вернуть «вниз» для противоположного ответа, однако «вниз» также требует теста, и именно этот тест вызывает синтаксическую ошибку. Я подумаю о том, как это происходит, и посмотрю, смогу ли я изменить запрос .. большое вам спасибо, что взглянули на проблему.

2. @JLC Проверьте второй фрагмент кода; он выполняет проверку для 'down' .