基于UCI成人数据集的Pandas带过滤分组计数问题
问题原因与解决方案
原代码错误点
你已经提前通过过滤条件df[df.sex=="Male"]筛选出了所有性别为男性的行,后续分组仅需按education维度聚合即可,额外将sex加入分组键会生成二级索引的结果,不符合仅按教育类型分组统计的需求。
正确实现代码
基础写法(和你原有逻辑兼容)
maleCount = df[df['sex'] == 'Male'].groupby('education')['sex'].count()
如果需要返回DataFrame格式而非Series,可以追加reset_index指定结果列名:
maleCount = df[df['sex'] == 'Male'].groupby('education')['sex'].count().reset_index(name='male_count')
更简便的单行写法
直接用value_counts方法一步完成统计:
maleCount = df[df['sex'] == 'Male']['education'].value_counts()
关于filter方法的说明
filter是分组级别的过滤方法,用于筛选符合条件的分组本身,不会直接做计数统计,确实可以和count组合使用,适用于需要先过滤分组再统计的场景。
举个使用示例:如果需要仅统计「男性人数超过200的教育类型」的对应男性数量,写法如下:
# 先过滤掉组内男性数量<=200的教育分组,再统计剩余分组的男性数 maleCount = df[df['sex'] == 'Male'].groupby('education')\ .filter(lambda x: len(x) > 200)\ .groupby('education')['sex'].count()
内容的提问来源于stack exchange,提问作者Amaranth
相关产品推荐
相关产品推荐

