Pandas - список многочисленных условий с логическим оператором, используемым с оператором «выбор» - PullRequest
1 голос
/ 30 марта 2020

Я получаю следующую ошибку:

ValueError: Значение истинности массива с более чем одним элементом является неоднозначным. Используйте a.any () или a.all ()

и, похоже, не можете найти решение.

Пожалуйста, помогите.

import numpy as np
import pandas as pd


t = np.arange(0,100,1); t = pd.Series(t)
y = np.random.randint(1,20,100); y = pd.Series(y)

df = pd.DataFrame({'t': t,'y': y})
mean = np.mean(df['y'])
st_dev = np.std(df.y)

conds = [(df['y'].values > mean + 3*st_dev), (df['y'].values < mean - 3*st_dev),
         (df['y'].values <= (mean + 3*st_dev) and (mean - 3*st_dev) <= df['y'].values )]
choices = [1,0,2]

1 Ответ

0 голосов
/ 30 марта 2020

Проблема была and при работе со скалярами, здесь необходимо & для побитового AND, а также необходимо добавить (), потому что операторы приоритета:

conds = [(df['y'].values > mean + 3*st_dev), (df['y'].values < mean - 3*st_dev),
         (df['y'].values <= (mean + 3*st_dev)) & ((mean - 3*st_dev) <= df['y'].values )]
choices = [1,0,2]

df['new'] = np.select(conds, choices)
print (df)
     t   y  new
0    0   4    2
1    1   2    2
2    2  13    2
3    3   8    2
4    4  14    2
..  ..  ..  ...
95  95   5    2
96  96  10    2
97  97   8    2
98  98   6    2
99  99  16    2

[100 rows x 3 columns]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...