求助:Python pandas 分组统计问题如何解决?
有一个数据为:
index|years|types
-|-|-
0|2010|auto
1|2010|auto
2|2011|manual
3|2006|manual
4|2015|auto
5|2015|auto
我希望能统计每年出现 auto/manual 的类型次数,最好还能把以年作为索引进行排列,达成下面的效果:
auto. manual
2006. 0. 1
2010. 2. 0
2011. 0. 1
2015. 2. 0
我应该怎么才能统计出那样的效果?
////备注:不太懂我的 markdown 表格为什么不显示
求助:Python pandas 分组统计问题如何解决?
格式被 V2EX 转的不是很清楚,编辑次数太多了也无法继续编辑了。希望大家能耐心看完,给我一点帮助。Google 了很多,还是不知道怎么做,先谢谢各位了。
帖子内容:
“我有一个DataFrame,包含‘部门’和‘销售额’两列。想按部门分组后,计算每个部门的总销售额和平均销售额,但分组后总是报错,求解决方法!”
回复:
这个问题很常见,一般是分组操作或列名引用不对。直接上代码:
import pandas as pd
# 示例数据
data = {'部门': ['A', 'A', 'B', 'B', 'A'],
'销售额': [100, 200, 150, 300, 250]}
df = pd.DataFrame(data)
# 分组计算
result = df.groupby('部门')['销售额'].agg(总销售额='sum', 平均销售额='mean').reset_index()
print(result)
关键点:
- 用
groupby('部门')按部门分组。 - 通过
['销售额']指定要计算的列,避免操作到其他列。 agg()里用字典或元组列表定义多个聚合计算,列名可自定义。- 最后
reset_index()把部门从索引变回普通列,方便后续处理。
如果还报错,检查列名是否有多余空格或数据类型是不是数值(用 df['销售额'] = pd.to_numeric(df['销售额'], errors='coerce') 转换)。
总结:用 groupby + agg 一次搞定多个聚合计算。
df.groupby([df[‘years’], df[‘types’]]).count().unstack() (未测试:-D )
思路是先 groupby 统计次数,然后 unstack 列变行
太谢谢了~~~
偷懒了,给 dataframe 加上了一列然后 groupby 统计了一下
再次感谢,刚刚一不小心还没打完字就发过去了,把你回答中的 count()改成 size()就能出来我预期的效果了,还是需要多多学习研究一下,谢谢你的帮助。
df.groupby([df[‘years’], df[‘types’]]).count().unstack()
很感谢你的帮助,我研究一下你的方法~😊
pd.pivot_table(index = “year” , column = “types” , aggfunc=sum)
试试透视表,效果应该就是你说的这样

