Фильтрация объектов Pandas groupby

у меня есть фрейм данных pandas

df.columns
Index([u’car_id’,u’color’,u’make’,u’year’)]

Я хотел бы создать новый фильтруемый объект, который имеет количество каждой группы (цвет, марка, год);

grp = df[[‘color’,’make’,’year’]].groupby([‘color’,’make’,’year’]).size()

который возвращает что-то вроде этого

color   make   year     count
black   honda  2011   416

Я хотел бы иметь возможность фильтровать его, однако, когда я пытаюсь это:

grp.filter(lambda x: x[‘color’]==‘black’)

Я получаю эту ошибку

ошибку TypeError: 'функция' объект не повторяемое

как я могу использовать "groupby" объект для того, чтобы отфильтровать строки?

2 ответов


Я думаю, вам нужно добавить reset_index и затем выводится DataFrame. Последнее использование boolean indexing:

df = df[['color','make','year']].groupby(['color','make','year'])
                                .size()
                                .reset_index(name='count')


df1 = df[df.color == 'black']

1
Фильтр досрочно

cols = ['color','make','year']
df[df.color == 'black', cols].grouby(cols).size()

2 Использовать xs для индексов поперечных сечений

cols = ['color','make','year']
grp = df[cols].groupby(cols).size()

df.xs('black', level='color', drop_level=False)

или

df.xs('honda', level='make', drop_level=False)

или

df.xs(2011, level='year', drop_level=False)