У меня есть значения в группе, и если значение находится в диапазоне от 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 (буквально закодирован на несколько дней). Пожалуйста, объясните, что происходит и помогите! Огромное спасибо!!
Я думаю, ты был почти там. Для проверки значений в группе вам нужно использовать 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
df