pandas группы удаления фрейма данных с более чем n строками в groupby - PullRequest
2 голосов
/ 05 августа 2020

У меня есть фрейм данных:

df = [type1 , type2 , type3 , val1, val2, val3
       a       b        q       1    2     3
       a       c        w       3    5     2
       b       c        t       2    9     0
       a       b        p       4    6     7
       a       c        m       2    1     8
       a       b        h       8    6     3
       a       b        e       4    2     7]

Я хочу применить groupby на основе столбцов type1, type2 и удалить из dataframe группы с более чем 2 строками. Таким образом, новый фрейм данных будет:

df = [type1 , type2 , type3 , val1, val2, val3
       a       c        w       3    5     2
       b       c        t       2    9     0
       a       c        m       2    1     8
  ]

Как лучше всего это сделать?

1 Ответ

4 голосов
/ 05 августа 2020

Используйте GroupBy.transform для получения количества групп для Series с таким же размером, что и исходный, поэтому возможна фильтрация по Series.le для <= в boolean indexing:

df = df[df.groupby(['type1','type2'])['type1'].transform('size').le(2)]
print (df)
  type1 type2 type3  val1  val2  val3
1     a     c     w     3     5     2
2     b     c     t     2     9     0
4     a     c     m     2     1     8

Если производительность не важна или возможен небольшой DataFrame, используйте DataFrameGroupBy.filter:

df =df.groupby(['type1','type2']).filter(lambda x: len(x) <= 2) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...