groupby().count()问题:如果分类里没有的类别如何计数显示0

问题:

如果直接使用count计数,那么如果一个类别不出现,那么就不能显示出类别为0,groupby后计数没有的类别将直接不显示。

例如:

#数据
data = [[3, 108939], [2, 12747], [8, 87709], [6, 91796]]
accounts = pd.DataFrame(data, columns=['account_id', 'income']).astype({'account_id':'Int64', 'income':'Int64'})


#分类
accounts.loc[accounts.income<20000,'category']='Low Salary'
accounts.loc[(accounts.income<=50000)&(accounts.income>=20000),'category']='Average Salary'
accounts.loc[accounts.income>50000,'category']='High Salary'

#如果直接使用groupby.count,数据中没有出现average salary这个类别,将不会被统计到
accounts.groupby(by='category',as_index=False).count()[['category','income']].rename(columns={'income':'count'})

 结果如下,不能统计到average salary数量为0。如果在多类分类的情况下,子集的中的部分为空,整个子集都不能被统计。

修改方法:

将类别生成一个表,然后右连接得到表:

df=pd.DataFrame({'category':['Low Salary','Average Salary','High Salary']})
 pd.merge(accounts,df,how='right',on='category').groupby(by='category',as_index=False).count()[['category','income']].rename(columns={'income':'accounts_count'})

对连接后的表进行groupby后计数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值