本章要回答的问题:多张表的数据怎么合成一张——按行摞、按列拼、按键对位,各用什么手法?行式的长表与列式的宽表怎么互相变身?领导要的"行是渠道、列是月份、格子里是总额"的汇总表,怎么一步出?摆盘区把这三问一次端平。
后厨的活往往不是一口锅出全席:订单表在业务库、用户表在会员系统、退款表在风控那边,分析要的却是"三张表合起来的完整故事";拼好之后,数据的"站姿"还常常不对——流水是行式的长表,报表要列式的宽表,一来一回就得变身。摆盘区处理的正是这种"合"与"形"的问题:合不好,行数凭空膨胀、键值错位;形不对,下游工具吃不下、领导看不懂。
这一章的手法有个共同前菜:先想清楚"键"。按行摞不需要键,只需要列对齐;按键合并全靠键,键选错,盘里全是串了味的菜;长宽变身更是键的重排艺术。所以本章每一节都从"键与结构"讲起,函数参数反而是后半段的事。这也是它独立成章的理由——合并与重塑不是某个函数的用法,而是一套关于"数据如何摆位"的手艺。
可考核知识点清单:concat 的 axis 与 join 两个参数的配合;merge 的 on、how、suffixes、validate 的分工;inner、left、right、outer 各自保留谁的行;合并后行数校验的两种办法;pivot 报错"索引重复"的原因与 pivot_table 的替代;melt 的 id_vars 与 value_vars 的分工;stack 与 unstack 对最内层索引的操作方向;pivot_table 的 margins 与 fill_value;crosstab 的 normalize 两种口径。
| 节 | 回答哪个问题 | 关键产出 |
|---|---|---|
| 5.1 数据合并与连接 | 多张表怎么合一张 | 四种 how 的对位图 |
| 5.2 长宽表重塑 | 站姿怎么变 | pivot 与 melt 双向手法 |
| 5.3 汇总报表 | 二维汇总怎么一步出 | pivot_table 与 crosstab |
**问:merge 与 concat 记不住边界?**记用途:上下摞表用 concat(不看内容只对齐列),左右按键补信息用 merge(键是对位凭据)。"拼接"与"连接"这两个中文词,正好各对应一个函数。
**问:长表宽表到底该用哪种?**看下一站的消费者:入库、聚合、画折线吃长表;给人看的对比报表、透视汇总吃宽表。5.2 的立场是"随时能变"——两套手法都要熟,站姿跟着场合走。
**问:合并后行数变了正常吗?**merge 的 how 决定合法变化:inner 变少、outer 变多、left 不多于左表。但"多得多"几乎总是键重复在作祟——5.1 的 validate 参数与前后点行数的纪律,就是为这个准备的。
摆盘完成,一桌席可上:第 6 章调味架提供随取随用的工具(函数式、正则、抽样),第 7 章中央厨房把这些手法搬进成建制的库与框架。本章 5.3 的汇总报表与 4.1 的 groupby 是同一件事的两种摆法,8.5 的流水线实战会把"合并—重塑—出表"整段串起来跑一遍。