Причина этого в том, что pandas решает выдать ошибку, если вы пытаетесь транслировать операции на многоэлементных логических сериях, поскольку это по своей сути неоднозначно относительно того, каким должно быть поведение.
pandas следует соглашению NumPy об ошибке, когда вы пытаетесь преобразовать что-то в bool. Это происходит в операторе if или при использовании логических операций: и, или, и нет. Неясно, каким должен быть результат следующего кода:
См. документацию pandas для получения дополнительной информации об этом поведении.
Что касается как вы можете заставить желаемое поведение работать; имейте в виду, что вы можете назначить столбец для фрейма данных, используя множество различных типов данных (списки, dicts, ndarrays и т. д. c.). Таким образом, простой способ обойти проблемы сравнения рядов - это использовать понимание списка.
df_test['price_outlier'] = [a <= b <= c for a, b, c in zip(df_test['price_h1'], df_test['price'], df_test['price_h2'])]