pandas groupby 分组统计笔记

586 字
3 分钟
pandas groupby 分组统计笔记

pandas groupby 分组统计笔记#

做表格分析时,经常会遇到一个问题:原始数据是一行一条记录,但我们真正想看的结果是按类别汇总后的统计值。比如按商品类别统计销售额,按班级统计平均分,按日期统计订单数量。

在 pandas 里,这类问题一般用 groupby 解决。

1、准备一份示例数据#

import pandas as pd
data = {
"日期": ["2026-07-01", "2026-07-01", "2026-07-02", "2026-07-02"],
"类别": ["图书", "数码", "图书", "数码"],
"销量": [3, 2, 5, 1],
"单价": [40, 300, 35, 280],
}
df = pd.DataFrame(data)
df["销售额"] = df["销量"] * df["单价"]
print(df)

这里先增加一列 销售额,后面统计时会用到。

2、按一个字段分组#

如果想看每个类别的总销售额:

result = df.groupby("类别")["销售额"].sum()
print(result)

输出结果的索引就是类别,值就是每个类别汇总后的销售额。

如果希望结果仍然是普通表格,可以加上:

result = df.groupby("类别", as_index=False)["销售额"].sum()
print(result)

as_index=False 对后续导出 Excel 或继续合并数据比较方便。

3、按多个字段分组#

如果想看每天、每个类别的销售额:

result = df.groupby(["日期", "类别"], as_index=False)["销售额"].sum()
print(result)

多个字段分组时,可以理解为先按日期分,再在每个日期里面按类别分。

4、一次统计多个指标#

实际分析时,经常不只看一个指标。可以使用 agg:

summary = df.groupby("类别", as_index=False).agg(
总销量=("销量", "sum"),
平均单价=("单价", "mean"),
总销售额=("销售额", "sum"),
)
print(summary)

这种写法的好处是输出列名可以自己命名,结果比较清楚。

5、排序和筛选#

汇总后通常还要排序:

summary = summary.sort_values("总销售额", ascending=False)
print(summary)

也可以筛选出销售额较高的类别:

high = summary[summary["总销售额"] > 200]
print(high)

这样就能从原始明细数据得到更适合观察的统计结果。

总结#

groupby 的核心思路是“先分组,再统计”。单字段分组适合看某个类别的汇总,多字段分组适合看交叉维度,agg 适合一次输出多个指标。写分析代码时,可以先把问题翻译成“按什么分组、统计什么列、使用什么函数”,再去写 pandas 代码。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

pandas groupby 分组统计笔记
https://blog.tjcheng.cn/posts/daily/2026-07-01/pandas-groupby-summary/
作者
TengJinCheng
发布于
2026-07-01
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
TengJinCheng
Hello, I'm Teng.
公告
欢迎来到TengJinCheng工作铺!
音乐
封面

音乐

暂未播放

0:000:00
暂无歌词
分类
标签
站点统计
文章
157
分类
7
标签
114
总字数
109,939
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.13.4
文章许可
CC BY-NC-SA 4.0

文章目录