Python制作数据分析透视表的方法详解
前言透视表pivot table是把长表转成交叉表的经典操作 用一列做行标签、一列做列标签、一列做取值交叉的格子里放聚合结果。 Excel 里的透视表人人会点pandas 里对应的是pivot_table。初学者最容易犯的两个错一是把pivot和pivot_table当成一回事 二是以为不传聚合函数就是求和。实际情况是pivot只做重塑、不聚合 遇到重复的行×列组合会直接报错而pivot_table默认的聚合函数是平均值mean不是求和。需要说明pandas 是第三方库本机没有 Python 解释器也没有 pandas 示例无法运行验证只能逐行人工推演。参数细节以 Pandas 官方文档为准。一、pivot_table 的参数官方签名以当前文档为准pandas.pivot_table(data, valuesNone, indexNone, columnsNone,aggfuncmean, fill_valueNone, marginsFalse,dropnaTrue, margins_nameAll, observedTrue,sortTrue, **kwargs)参数作用data输入DataFramevalues要聚合的数值列index放到行上的分组键columns放到列上的分组键aggfunc聚合函数默认meanfill_value结果里缺失填什么margins是否加合计行列理解方式index和columns是分组维度values是被聚合的度量aggfunc决定怎么聚。它和groupby是一体的——pivot_table基本可以理解为 按index和columns分组后对values做aggfunc再把结果摊开。 参数里dropnaTrue指的是分组键含缺失的行会被丢弃 和后面讲的结果表里的空位不是一回事别混淆。二、最基础的例子# pandas 1.0import pandas as pddf pd.DataFrame({region: [东, 东, 南, 南, 东],month: [1月, 2月, 1月, 2月, 1月],amount: [10, 20, 30, 40, 50],})table pd.pivot_table(df,valuesamount,indexregion,columnsmonth,aggfuncsum,fill_value0,marginsTrue, # 加 All 合计行列)print(table)注意这里显式写了aggfuncsum。如果不写结果会是均值 这是与直觉最不一致的地方务必记住。三、多个聚合函数、多列取值aggfunc可以传列表values也可以传列表# pandas 1.0table pd.pivot_table(df,valuesamount,indexregion,columnsmonth,aggfunc[sum, count],)这样会产生外层是聚合函数、内层是月份的列层级MultiIndex的列。 当values和aggfunc都是列表时列层级会更多一层 取值时要用元组逐级定位例如table[(sum, 1月)]。四、fill_value 与 marginsfill_value填的是结果表里的空位。因为不是每种维度组合都有数据交叉后必然出现空格填 0 或填其他默认值能让表更整齐。marginsTrue会增加All行和All列值是对应的汇总。汇总用的函数由aggfunc决定多函数时行为要按文档确认。margins_name可改合计行列的名字默认是All。五、pivot 与 pivot_table 的区别对比pivotpivot_table是否聚合不聚合只重塑会聚合重复组合报错用aggfunc合并默认聚合无mean适用已经是唯一组合的整洁数据有重复、需要汇总的数据pivot的语义很直接indexcolumns必须唯一确定一个values 否则就抛出ValueError: Index contains duplicate entries。 遇到这个报错第一反应应该是改用pivot_table并指定aggfunc。六、crosstab另一条做交叉表的路如果只是想数两个类别交叉出现多少次pd.crosstab更顺手# pandas 1.0freq pd.crosstab(df[region], df[month])print(freq)crosstab默认做的是计数频数它接受的是类别的序列而不是整张表 语义上和透视表互补。它还支持normalize参数用来把频数换算成比例或百分比 例如按行、按列或整体归一做占比分析时很方便。七、把结果整理成平表透视表的结果通常带着行索引和列索引可能是多层直接写 Excel 会挤在一起 不适合再加工。常见的整理方式是压平列名 重置索引# pandas 1.0flat table.reset_index()flat.columns [_.join(map(str, col)) if isinstance(col, tuple) else str(col)for col in flat.columns]print(flat)reset_index()把行索引变回普通列列名若是多层元组就拼成一个字符串 得到的就是一张规规矩矩的平表可以直接交给to_excel或下游系统。如果只是想快速看结构table.stack()/table.unstack()能在 宽表和长表之间切换但stack后缺失值默认会被丢掉 需要保留请显式传dropnaFalse。八、完整示例# pandas 1.0import pandas as pddef report(rows: pd.DataFrame) - pd.DataFrame:table pd.pivot_table(rows,valuesamount,indexregion,columnsmonth,aggfuncsum,fill_value0,marginsTrue,margins_name合计,)return table.sort_values(合计, ascendingFalse)if __name__ __main__:data pd.DataFrame({region: [东, 南, 东],month: [1月, 1月, 2月],amount: [10, 30, 20],})print(report(data))常见坑点以为pivot_table默认求和❌ 不写aggfunc直接调用得到的是平均值和报表预期不符 ✅ 求和就写aggfuncsum求计数写count或size用pivot处理有重复组合的数据❌df.pivot(indexa, columnsb, valuesc)抛重复条目错误 ✅ 改pivot_table(..., aggfuncsum)让重复组合被聚合掉用之类的判等去找透视表里的空值❌ 结果表里的空位当成普通缺失用比比不出来 ✅ 生成时就传fill_value0或事后用isna()判定fill_value和原始数据的填充搞混❌ 以为fill_value会改原始DataFrame✅fill_value只作用于生成的透视表原表不变多函数聚合后按列名直接取列❌table[1月]报 KeyError因为列已经变成多层索引 ✅ 用元组定位table[(sum, 1月)]或先table.columns看层级aggfunccount与size混用❌ 想数行数却用count结果NaN没被算进去数目偏小 ✅count数非缺失值size数行数含缺失按需求选分组维度里有分类类型时列爆炸❌ 某个键是category类型且基数很大透视表出几百列且大量为空 ✅ 注意observed参数为True时只显示出现过的组合避免空组合撑爆列总结需求该怎么做交叉汇总pivot_table(values, index, columns, aggfunc)默认行为aggfunc是mean不是sum填空白fill_value加合计marginsTrue只重塑不聚合pivot要求组合唯一只数频数pd.crosstab透视表的本质是分组 摊开。只要记住index/columns是维度、values是度量、aggfunc默认是均值绝大多数困惑都能避免。 真正动手前建议先在数据上跑一次groupby确认口径再换pivot_table摊平。

相关新闻

飞鸽传书IPMSG源码解析:UDP局域网通信实战指南

飞鸽传书IPMSG源码解析:UDP局域网通信实战指南

简介:本资源为飞鸽传书(IPMessenger)2.06版完整开源源码包,面向网络通信开发者、C初学者及局域网即时通讯技术研究者,用于学习跨平台P2P消息传输、UDP广播发现与TCP文件传输协同机制等核心实现。压缩包共58个文件&…

2026/10/13 7:08:57 阅读更多 →
基恩士激光位移传感器上位机通信Demo解析:C#/C++/VB.net三语言实现

基恩士激光位移传感器上位机通信Demo解析:C#/C++/VB.net三语言实现

简介:面向基恩士激光位移传感器的多语言开发示例包,聚焦工业自动化、精密制造与质量检测场景,帮助C#、C、VB.NET开发者在Windows平台通过调用DLL快速实现传感器通信与测量数据读取。压缩包共365个文件,大小仅1.27MB,包…

2026/10/13 7:08:57 阅读更多 →
bert-base-chinese中文NLP模型加载与微调实战指南

bert-base-chinese中文NLP模型加载与微调实战指南

简介:这份资源是针对中文场景优化的BERT预训练模型权重包,面向深度学习与自然语言处理领域的开发者、研究者和学生,可用来完成中文文本分类、情感分析、问答、翻译等任务,尤其适合需要离线加载大模型进行微调或验证算法效果的学习…

2026/10/13 7:07:57 阅读更多 →

最新新闻

SQL UNIQUE约束详解:原理、数据库差异与防重复设计实践

SQL UNIQUE约束详解:原理、数据库差异与防重复设计实践

1. UNIQUE约束到底是什么,为什么你需要它做数据库设计这些年,我见过太多因为“忘记加唯一约束”而崩溃的业务系统。最典型的场景:用户注册接口被脚本刷了一遍,username重复了;订单表里同一笔订单被回调程序insert了两次…

2026/10/13 7:55:19 阅读更多 →
Agent-Skills:智能体原子化能力的设计与工程实践

Agent-Skills:智能体原子化能力的设计与工程实践

1. “agent-skills”不是新词,而是智能体能力体系的命名共识 最近在多个技术社区、开源项目文档和内部架构评审会上,“agent-skills”这个组合词出现频率陡增——它既不指代某个具体开源库,也不是某家公司的私有协议,而是一类设计…

2026/10/13 7:55:19 阅读更多 →
Flink DataStream与Table API转换实战:Schema推导、时间属性与常见避坑指南

Flink DataStream与Table API转换实战:Schema推导、时间属性与常见避坑指南

做实时数据处理这几年,Flink的DataStream和Table API来回切换是我用得最频繁的操作之一。刚接触那会儿,总觉得这两套API是两套独立的体系,流上处理业务逻辑用DataStream,做统计查询用Table,中间隔着一道说不清的墙。后…

2026/10/13 7:55:19 阅读更多 →
LiteLLM:大模型API统一网关与智能路由实战指南

LiteLLM:大模型API统一网关与智能路由实战指南

1. LiteLLM不是另一个大模型,而是一把“万能适配器”最近在几个技术群和开源社区里,频繁看到有人发问:“LiteLLM到底是个啥?是又一个新模型吗?”“它和Ollama、LM Studio有什么区别?”——这种误解非常典型…

2026/10/13 7:55:19 阅读更多 →
LiteLLM:大模型API统一接入与智能路由实战指南

LiteLLM:大模型API统一接入与智能路由实战指南

1. 为什么“litellm”突然在开发者圈里被高频提及——它不是新模型,而是新范式最近两周,在多个技术社区、内部分享会和开源项目讨论区里,“litellm”这个词出现的频率明显升高。它不像Llama、Qwen或Claude那样代表一个具体的大语言模型&#…

2026/10/13 7:55:19 阅读更多 →
开源代码审查实战:流程设计、工具配置与团队落地方法

开源代码审查实战:流程设计、工具配置与团队落地方法

代码审查这事儿,我过去几年一直想好好聊一聊。初看上去,open-code-review 这个项目标题没什么特别,好像就是把自己团队做代码评审的过程、工具和规范整理出来,开源给社区用。但如果真这么理解,那就有点浪费了。代码审查…

2026/10/13 7:54:17 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →