Панды: держать группу в данных, когда значение в группе попадает в диапазон

1

У меня есть значения в группе, и если значение находится в диапазоне от 5 до 25, я хочу сохранить эту группу в данных.

На основе Pandas: удалите группу из данных, когда значение в группе соответствует требуемому условию, я написал следующее:

dfnew = df.groupby('groupname').filter(lambda x: (x['column2']>=5) & (x['column2']<=25))

Когда я использую это, там эта ошибка: filter function returned a Series, but expected a scalar bool

Затем я также попробовал:

dfnew = df.groupby('groupname').filter(lambda x: 5<= x['column2']<=25)

Но это дало ошибку:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

И затем я попробовал:

dfnew = df.groupby('groupname').filter(lambda x: (x['column2'].any()>=5) & (x['column2'].any()<=25))

Который только возвращает пустой фреймворк с именами столбцов

Я очень новичок в python и datascience (буквально закодирован на несколько дней). Пожалуйста, объясните, что происходит и помогите! Огромное спасибо!!

  • 0
    Покажи маленький df
Теги:
pandas
lambda
filter

1 ответ

1

Я думаю, ты был почти там. Для проверки значений в группе вам нужно использовать max и min. Вот пример с набором данных игрушек.

Сначала данные:

import pandas as pd

data = pd.DataFrame(
    {
        'id': [1, 2, 3] * 3,
        'value': [3, 20, 21, 6, 24, 7, 21, 8, 50]
    }
)

data

Что дает нам:

    id  value
0   1   3
1   2   20
2   3   21
3   1   6
4   2   24
5   3   7
6   1   21
7   2   8
8   3   50

Затем используйте шаблон group/filter, чтобы сохранить только группы, в которых значение min в группе больше или равно 5, а максимальное значение в группе меньше или равно 25. В этом случае мы ожидаем, что только группа 2 для возврата.

data.groupby('id').filter(lambda x: (x['value'].max() <= 25) & (x['value'].min() >= 5))

И это то, что мы получаем:

id  value
1   2   20
4   2   24
7   2   8

Ещё вопросы

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