Значение истины для ряда в неоднозначности - PullRequest
1 голос
/ 22 октября 2019

Данные являются кратким примером. У меня будет около 11 различных «если эти 2 условия истинны, верните« этот текст »» и примените его к 3k строкам. я выписал имена столбцов как переменные, чтобы не вводить имена столбцов для каждого условия.

я продолжаю получать ValueError, значение true в неоднозначном. Все посты, которые я видел, рассказывают об использовании побитового кода и разделении каждого теста скобками. что я делаю. но это все равно ошибки. я попытался включить столбец полностью ссылаться, но все еще ошибки на ValueError. если я убираю 'self' из функции, я получаю TypeError. Не уверен, как это понять.

data = [ [3.5, 6], [-4,-8],[4,1] ]
df = pd.DataFrame(data, columns=['line','value'])

l = df['line']
v = df['value']

def errortype(self):
   if (l >=0) & (v > l):
      return 'error1'
   elif (l < 0) & (v < l):
      return 'error2'

df['test']= df.apply(errortype, axis=1)

1 Ответ

2 голосов
/ 22 октября 2019

Попробуйте:

data = [ [3.5, 6], [-4,-8],[4,1] ]
df = pd.DataFrame(data, columns=['line','value'])


#l = df['line']  do not need this line
#v = df['value']  do not need this line

def errortype(row):
#     print(row)
    if (row['line'] >=0) & (row['value'] > row['line']):
        return 'error1'
    elif (row['line'] < 0) & (row['value'] < row['line']):
        return 'error2'

df['test']= df.apply(errortype, axis=1)

Вывод:

   line  value    test
0   3.5      6  error1
1  -4.0     -8  error2
2   4.0      1    None

Однако лучше использовать векторизованный способ np.select

cond1 = (df['line'] >= 0) & (df['value'] > df['line'])
cond2 = (df['line'] < 0) & (df['value'] < df['line'])

df['test'] = np.select([cond1,cond2],['error1','error2'],np.nan)

Вывод:

   line  value    test
0   3.5      6  error1
1  -4.0     -8  error2
2   4.0      1     nan
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...