我有一个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'对象,以便过滤掉行?
答案 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)