Python Excel数据透视表 pandas实现
用pandas的pivot_table实现Excel数据透视表效果,按行按列分组、求和/计数/平均值,支持多级行列,导出成新Excel。
场景痛点
一份销售明细,要按"地区×月份"看各产品的销售额汇总,还要看订单数。Excel里拖字段做透视表,每次数据更新都得重做一遍。用pandas的 pivot_table 写好公式,刷新数据跑一下就出新结果。
用到的库
pip install pandas openpyxl
完整代码
import pandas as pd
def pivot_demo():
df = pd.read_excel("./销售明细.xlsx")
# 1. 单维度透视:按地区汇总销售额总和
p1 = pd.pivot_table(df, index="地区", values="金额",
aggfunc="sum", margins=True, margins_name="合计")
# 2. 二维透视:行=地区,列=月份,值=金额求和
p2 = pd.pivot_table(df, index="地区", columns="月份",
values="金额", aggfunc="sum", fill_value=0, margins=True)
# 3. 多个聚合:同时看金额总和 + 订单笔数
p3 = pd.pivot_table(df, index="地区", columns="产品",
values="订单号", aggfunc=["sum", "count"], fill_value=0)
# 注意:count是数订单号个数;sum金额要把values改成"金额"
# 4. 多级行:行=地区+产品,值=金额求和
p4 = pd.pivot_table(df, index=["地区", "产品"], values="金额",
aggfunc="sum", fill_value=0)
with pd.ExcelWriter("./透视结果.xlsx", engine="openpyxl") as writer:
p1.to_excel(writer, sheet_name="按地区求和")
p2.to_excel(writer, sheet_name="地区×月份")
p3.to_excel(writer, sheet_name="金额汇总+订单数")
p4.to_excel(writer, sheet_name="地区+产品")
print("透视表已生成: ./透视结果.xlsx")
if __name__ == "__main__":
pivot_demo()
代码讲解
index对应透视表的行字段,columns对应列字段,values是要汇总的数值列。aggfunc="sum"求和;换成"count"计数、"mean"平均值、"max"最大值。margins=True自动加一行/列"合计",margins_name自定义合计行名字。fill_value=0把空单元格填0,避免导出后出现空白。index=["地区","产品"]多级行,行字段嵌套。
运行结果
生成 透视结果.xlsx,4个sheet分别是不同维度的透视表,行是分类、列是月份/产品、值是汇总金额。
注意事项
pivot_table默认会自动排序索引,想要保持原顺序先用pd.Categorical固定顺序。- 数值列如果混入文本,
sum会跳过并报警告,先用pd.to_numeric(df["金额"], errors="coerce")清洗。 - 多级索引导出Excel后,行头会合并单元格,阅读体验和Excel原生透视表一致。

更新时间:2026-09-15 09:04:34
上一篇:Python Excel设置打印区域页眉页脚:打印前一键排版