Создание фильтра с использованием лямбды вызывает ошибку bool - PullRequest
1 голос
/ 19 апреля 2019

Я хочу отфильтровать значение "UNK" из столбца payment_type и вернуть полный фрейм данных. Я хотел бы использовать анонимную функцию. Я получаю ошибку типа.

Я пытался создать отдельную функцию, но все еще не смог заставить ее работать. Я запускаю это на ноутбуках Jupyter

paymentGroups = fareData.groupby("payment_type")

filteredPaymentTypes = paymentGroups.filter(lambda x: 
                                   x["payment_type"].values != 'UNK')

Я получаю эту ошибку:

TypeError: filter function returned a ndarray, but expected a scalar bool

Желаемый результат - это измененный фрейм данных без строк, включающих «UNK» в столбце payment_type.

Ответы [ 2 ]

0 голосов
/ 19 апреля 2019

Почему бы не отфильтровать значения перед группой с помощью простого mask?

mask = fareData.payment_type != 'UNK'
fareData = fareData[mask]
0 голосов
/ 19 апреля 2019

Фильтрация с groupby необходима, когда условие выбора относится к какому-либо свойству всей группы , например, к среднему значению некоторого столбца (в текущей группе)> some_value .

Но в вашем случае критерий выбора относится к одному столбцу в текущей записи (не в группе), поэтому группировка не требуется.Вместо этого используйте query, например:

fareData.query("payment_type != 'UNK'")

Редактировать

Если по какой-то причине вы все еще хотите использовать группировку, обратите внимание, что в этом случае фильтрация выполняется по ключу группировки (payment_type), то есть то же самое в каждой строке текущей группы.

Таким образом, условие фильтрации может проверять интересующее значение только в первой строке текущая группа:

paymentGroups.filter(lambda x: x['payment_type'].iloc[0] != 'UNK')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...