看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
在日常的销售分析或运营数据处理中,我们经常需要从一份原始的明细表中快速生成汇总报告,例如:
这些操作在 pandas 中非常常见,而今天这篇文章将带你用三个方法一口气搞定:
pivot_table() —— 生成透视汇总表fillna() —— 补齐空缺数据sort_values() —— 排序输出结果你会发现,用 pandas 写报表,不仅简单,还很优雅。
我们有一份销售明细表,记录了各销售员在不同地区、不同月份的销售额。
下面是样例数据(用字符串形式读取):
import pandas as pd
from io import StringIO
data = StringIO("""
salesman,region,month,sales
Alice,East,Jan,1200
Alice,East,Feb,1100
Bob,West,Jan,900
Bob,West,Mar,1500
Charlie,North,Feb,800
Charlie,North,Mar,NaN
""")
df = pd.read_csv(data)
需求描述:
我们希望生成一个 按地区和月份汇总的销售透视表,每个格子表示该地区当月的总销售额。
同时:
0 填充。最终结果应类似如下表格:
| region | Jan | Feb | Mar | total |
|---|---|---|---|---|
| East | 1200 | 1100 | 0 | 2300 |
| West | 900 | 0 | 1500 | 2400 |
| North | 0 | 800 | 0 | 800 |
思路如下:
pivot_table() 将原始明细转成“地区 × 月份”的透视表,汇总销售额。fillna(0) 填补缺失月份的销售额。total 计算各地区的销售总额。sort_values() 对结果按总销售额降序排列。代码如下:
result = (
df
.pivot_table(index='region', columns='month', values='sales', aggfunc='sum')
.fillna(0)
.assign(total=lambda x: x.sum(axis=1))
.sort_values('total', ascending=False)
.reset_index()
)
print(result)
输出结果:
month region Feb Jan Mar total
0 West 0.0 900.0 1500.0 2400.0
1 East 1100.0 1200.0 0.0 2300.0
2 North 800.0 0.0 0.0 800.0
代码分析:
.pivot_table():按 region 分组,对每个月 sales 求和,生成透视结构。.fillna(0):替换 NaN 为 0,避免空值干扰汇总。.assign(total=lambda x: x.sum(axis=1)):横向求和得到总销售额列。.sort_values('total', ascending=False):按总额降序排列,便于发现表现最好的地区。这类数据透视汇总在销售、库存、绩效分析等场景中极其常见,也是 pandas 最具代表性的应用之一。
(完)
更新时间:2025-11-10 17:35:35 标签:pandas python 销售报告