Pandas分组后无法设置列名?Mongo数据转DataFrame分组计数遇问题
解决Pandas分组统计计数列的问题
嗨,我来帮你搞定这个分组统计的问题~先看看你之前两种方法为啥失败,再给你正确的实现方式:
为啥之前的方法不行?
- 方法一的问题:你只做了分组操作,没有执行聚合统计(比如计数),得到的
g是一个GroupBy对象,不是DataFrame,直接改列名当然没用啦。得先通过聚合生成计数列,才能得到带列名的结果。 - 方法二的问题:纯粹是语法错误!
groupby()之后的['_id']前面多了个空格,正确的链式调用应该是groupby(...)[列名].count(),中间不能有多余空格,不然Python会解析出错。
正确的实现方式
首先要确保你的DataFrame里已经有Year列(如果还没从Date字段提取的话,先加这一步),然后用两种方式都能得到你想要的结果:
方式1:用size()统计分组记录数(推荐,因为它直接统计每组的行数,不考虑缺失值)
# 先从Date字段提取Year(如果还没处理的话) crime['Year'] = pd.to_datetime(crime['Date']).dt.year # 按Primary Type和Year分组,统计每组数量并命名为Count result = crime.groupby(['Primary Type', 'Year']).size().reset_index(name='Count')
方式2:用count()指定列统计(适合你想基于某列非缺失值计数的场景)
修正你方法二的语法错误即可:
result = crime.groupby(['Primary Type', 'Year'])['_id'].count().reset_index(name='Count')
验证结果
运行完上面的代码后,你可以打印结果看看结构:
print(result.head())
输出会是包含Primary Type、Year、Count三列的DataFrame,完全符合你后续绘图的需求~
内容的提问来源于stack exchange,提问作者Sql_Pete_Belfast
相关产品推荐
相关产品推荐

