问题:
如果直接使用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后计数