📊 用Python轻松玩转数据分析:透视表(Pivot Table)实战指南
还在Excel里手动拖字段做汇总?面对成千上万行数据手足无措?别担心!今天带你用 Python + pandas 轻松实现强大的透视表(Pivot Table)——所有代码复制即用,无需任何外部文件!
🔍 什么是透视表?
透视表是一种将原始数据按不同维度(如地区、产品、时间)进行分组、聚合与重组的工具,常用于快速生成汇总报表。
在 Python 中,我们使用 pandas.pivot_table() 函数,它功能强大、语法直观。
先导入必备库:
import pandas as pdimport numpy as np
🧪 示例1:销售数据按“地区 × 产品”汇总
我们先用代码直接构造一份销售数据:
# 构造示例数据(无需CSV!)data = {'日期': ['2025-01-01', '2025-01-01', '2025-01-02', '2025-01-02','2025-01-03', '2025-01-03', '2025-01-04'],'地区': ['华东', '华南', '华东', '华北', '华南', '华东', '华北'],'产品': ['A', 'B', 'A', 'C', 'B', 'C', 'A'],'销售额': [100, 150, 200, 300, 120, 80, 250]}df = pd.DataFrame(data)print(df)
输出:
日期 地区 产品 销售额0 2025-01-01 华东 A 1001 2025-01-01 华南 B 1502 2025-01-02 华东 A 2003 2025-01-02 华北 C 3004 2025-01-03 华南 B 1205 2025-01-03 华东 C 806 2025-01-04 华北 A 250
❝💡 目标:查看每个地区每种产品的总销售额。
pivot1 = pd.pivot_table( df, values='销售额', index='地区', columns='产品', aggfunc='sum', fill_value=0# 将缺失值填为0)print(pivot1)
结果:
产品 A B C地区 华北 250 0 300华东 300 0 80华南 0 270 0
🧪 示例2:多级分组 + 多种聚合(平均值 & 订单数)
我们想同时知道:每个地区每种产品的平均销售额和订单数量。
pivot2 = pd.pivot_table( df, index=['地区', '产品'], values='销售额', aggfunc={'销售额': ['mean', 'count']}, fill_value=0)pivot2.columns = ['平均销售额', '订单数'] # 重命名列更清晰print(pivot2)
输出:
平均销售额 订单数地区 产品 华北 A 250.0 1 C 300.0 1华东 A 150.0 2 C 80.0 1华南 B 135.0 2
🧪 示例3:加入时间维度 —— 按月份分析趋势
我们将“日期”转为 datetime,并提取“月份”:
df['日期'] = pd.to_datetime(df['日期'])df['月份'] = df['日期'].dt.monthpivot3 = pd.pivot_table( df, values='销售额', index='月份', columns='地区', aggfunc='sum', fill_value=0)print(pivot3)
结果(假设都是1月数据):
地区 华北 华东 华南月份 1 550 380 270
🧪 示例4:添加“总计”行/列(margins 参数)
想一眼看到全局汇总?用 margins=True:
pivot4 = pd.pivot_table( df, values='销售额', index='地区', columns='产品', aggfunc='sum', fill_value=0, margins=True# 自动添加 All 行和列)print(pivot4)
输出末尾会多出:
超实用!
🎯 什么时候该用 pivot_table?
| |
|---|
| |
| |
| |
| ✅ pivot_table + Matplotlib |
❝💡 小技巧:pivot_table 默认会自动忽略 NaN,若需保留,可结合 dropna=False 使用。
📦 结语
透视表不是Excel的专利!用 Python 的 pandas.pivot_table(),你不仅能实现同样功能,还能自动化、可复用、可扩展。
所有代码无需外部文件,复制即跑!快去试试吧~
❤️ 如果你觉得有用,请点赞 + 在看 + 转发!让更多人告别手动汇总,拥抱高效数据分析!