Pandas groupby对象过滤

时间:2016-09-12 19:09:07

标签: python pandas indexing group-by conditional-statements

我有一个pandas数据帧

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

我想创建一个新的FILTERABLE对象,其中包含每个组的数量(颜色,品牌,年份);

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 个答案:

答案 0 :(得分:9)

我认为您需要添加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 :(得分:1)

选项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)