如何在Pandas中正确分组统计DataFrame各code的出现次数?
解决DataFrame按code分组统计出现次数的问题
没问题,我来帮你搞定这个分组统计的需求!
首先,你用df.groupby('code').agg('count')没得到预期结果的原因是:当你的DataFrame只有code这一列时,这个语句会生成一个以code为索引、列名还是code的结果,结构和你想要的code+count列的格式不符。
给你几个简单高效的解决方案:
方法1:使用size()(最推荐)
size()方法专门用来统计每个分组的行数,搭配reset_index()可以把索引转成列,再指定列名:
group = df.groupby('code').size().reset_index(name='count')
执行后就能得到你想要的结果:
code count 0 0000 2 1 0123 2 2 4567 1
方法2:使用value_counts()(更直接)
针对单列统计频次,value_counts()是最便捷的方式,之后转成DataFrame并调整结构即可:
# 先统计频次 group = df['code'].value_counts().reset_index(name='count') # 如果需要按code升序排列(和你的示例一致),可以加上排序 group = group.sort_values('code').reset_index(drop=True)
方法3:改造你原来的语句
如果一定要用agg('count'),可以对结果做后续调整,把列名重命名并重置索引:
group = df.groupby('code').agg('count').rename(columns={'code': 'count'}).reset_index()
内容的提问来源于stack exchange,提问作者aabujamra




