Я не уверен, что вам даже нужно np.where
здесь. Чтобы поэлементно and
две серии, используйте &
здесь вместо and
. См .: Логические операторы для логического индексирования в Pandas
Кроме того, 3750901.5068 <= train["x"] <= 3770901.5068
кажется внутренне переведенным python в (3750901.5068 <= train["x"]) and (train["x"] <= 3770901.5068)
, который, опять же, имеет and
и не будет работать. Таким образом, вам нужно либо явно разделить каждый на, например, (3750901.5068 <= train["x"]) & (train["x"] <= 3770901.5068)
или используйте Series.between
например train["x"].between(3750901.5068, 3770901.5068, inclusive=True)
. См .: Как выбрать строки в DataFrame между двумя значениями в Python Pandas?
Вам также понадобятся круглые скобки для двух аргументов &
.
Таким образом, конечный результат должен выглядеть следующим образом:
train["location"] = train["x"].between(3750901.5068, 3770901.5068, inclusive=True) & train['y'].between(-19268905.6133, -19208905.6133, inclusive=True)
Это даст вам серию bools (Истины и Ложи). Это уже только 0 и 1 под капотом. Если вы действительно хотите 0 и 1, вы можете выбрать решение из здесь . Например, train.location = train.location.astype(int)