используя «ИЛИ» для выбора данных в пандах

1

У меня есть dataframe значений, и я хотел бы изучить строки, которые являются выбросами. Я написал функцию ниже, которую можно вызвать с помощью функции groupby().apply() и она отлично работает для высоких или низких значений, но когда я хочу объединить их вместе, я генерирую ошибку. Я как-то испортил логический выбор OR но я мог найти документацию только для критериев выбора, используя &. Мы ценим любые предложения.

zach cp

df = DataFrame( {'a': [1,1,1,2,2,2,2,2,2,2], 'b': [5,5,6,9,9,9,9,9,9,20] } )

#this works fine
def get_outliers(group):
    x = mean(group.b)
    y = std(group.b)
    top_cutoff =    x + 2*y
    bottom_cutoff = x - 2*y
    cutoffs = group[group.b > top_cutoff]
    return cutoffs

#this will trigger an error
def get_all_ outliers(group):
    x = mean(group.b)
    y = std(group.b)
    top_cutoff =    x + 2*y
    bottom_cutoff = x -2*y
    cutoffs = group[(group.b > top_cutoff) or (group.b < top_cutoff)]
    return cutoffs

#works fine    
grouped1 = df.groupby(['a']).apply(get_outliers)
#triggers error
grouped2 = df.groupby(['a']).apply(get_all_outliers)
Теги:
pandas

1 ответ

2
Лучший ответ

Вам нужно использовать | вместо or. Операторы and и or являются специальными в Python и не хорошо взаимодействуют с такими вещами, как numpy и pandas, которые пытаются применить к ним элемент по всей коллекции. Поэтому для этих контекстов они переопределили "поразрядные" операторы & и | означает "и" и "или".

  • 0
    спасибо BrenBarn. Работает как шарм.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню