Группировка и фильтрация строк на основе нескольких условий в Pandas - PullRequest
1 голос
/ 20 июня 2020

Учитывая следующий фрейм данных:

store_id item_id  items_sold        date
1          1          0        2015-12-28
1          1          1        2015-12-28
1          1          0        2015-12-28
2          2          0        2015-12-28
2          2          1        2015-12-29
2          2          1        2015-12-29
2          2          0        2015-12-29
3          1          0        2015-12-30
3          1          0        2015-12-30

Я хочу сгруппировать по store_id и item_id, а затем удалить для каждой группы их количество записей меньше 4 и все значения items_sold - это 0 s.

Для удаления групп на основе первого условия я использовал приведенный ниже код, теперь как я могу добавить и объединить с ним второе условие?

g = df.groupby(['store_id', 'item_id'])
df = g.filter(lambda x: len(x) >= 4)

Ожидаемый результат будет таким:

store_id item_id  items_sold        date
2          2          0        2015-12-28
2          2          1        2015-12-29
2          2          1        2015-12-29
2          2          0        2015-12-29

Спасибо.

Ответы [ 2 ]

4 голосов
/ 20 июня 2020

Мы можем получить логический массив всех строк с помощью items_sold = 0, затем сгруппировать по этому массиву и проверить, all строки группы True:

m1 = ~df['items_sold'].eq(0).groupby([df['store_id'], df['item_id']]).transform('all')
m2 = df.groupby(['store_id', 'item_id'])['store_id'].transform('size') >= 4

df[m1 & m2]

   store_id  item_id  items_sold        date
3         2        2           0  2015-12-28
4         2        2           1  2015-12-29
5         2        2           1  2015-12-29
6         2        2           0  2015-12-29
1 голос
/ 20 июня 2020

Исправьте код

g.filter(lambda x: (len(x) >= 4) & (sum(x['items_sold'])>0))
   store_id  item_id  items_sold        date
3         2        2           0  2015-12-28
4         2        2           1  2015-12-29
5         2        2           1  2015-12-29
6         2        2           0  2015-12-29
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...