Использование нескольких критериев с функцией фильтра данных () - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь сделать что-то вроде этого -

df.groupby('brand').filter(lambda group: (len(group) >= 10) | (group.brand == "ABC") )

Фильтрация кадра данных по записям, которые имеют 10 или более вхождений при группировании по brand, ИЛИ, если атрибут записи brandсоответствует одному конкретному значению, которое я также хочу сохранить.

Кажется, что я еще далеко и, возможно, filter не может принять несколько критериев.

1 Ответ

0 голосов
/ 07 февраля 2019

Используйте (group.brand == "ABC").all() в качестве условия, когда хотите, чтобы все значения в group['brand'] равнялись "ABC".В противном случае в логическом контексте bool(group.brand == "ABC") повышает

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

Например,

import numpy as np
import pandas as pd
np.random.seed(2019)
N = 10
df = pd.DataFrame({'brand':np.random.choice(['ABC', 'DEF', 'GHI'], size=N),
                   'val':np.random.randint(4, size=N)})
result = df.groupby('brand').filter(lambda group: (len(group) >= 3)
                                    | (group['brand'] == "ABC").all())
print(result)

приводит к

  brand  val
0   ABC    0
1   GHI    0
3   ABC    0
4   GHI    1
5   GHI    3
6   ABC    0
8   ABC    2
9   GHI    3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...