📊 用Python轻松玩转数据分析:透视表(Pivot Table)实战指南

还在Excel里手动拖字段做汇总?
面对成千上万行数据手足无措?
别担心!今天带你用 Python + pandas 轻松实现强大的透视表(Pivot Table)——所有代码复制即用,无需任何外部文件


🔍 什么是透视表?

透视表是一种将原始数据按不同维度(如地区、产品、时间)进行分组、聚合与重组的工具,常用于快速生成汇总报表。

在 Python 中,我们使用 pandas.pivot_table() 函数,它功能强大、语法直观。

先导入必备库:

import pandas as pd
import 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   100
1  2025-01-01 华南   B   150
2  2025-01-02 华东   A   200
3  2025-01-02 华北   C   300
4  2025-01-03 华南   B   120
5  2025-01-03 华东   C    80
6  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.month

pivot3 = 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)

输出末尾会多出:

  • 行:All → 各产品的总销售额

  • 列:All → 各地区的总销售额

  • 右下角:整体总和!

超实用!


🎯 什么时候该用 pivot_table?

场景

推荐工具

快速生成交叉汇总表

✅ pivot_table

需要二维结构(行×列)

✅ pivot_table

灵活链式操作、长格式输出

⚙️ groupby

自动化日报/周报

✅ pivot_table + Matplotlib

💡 小技巧:pivot_table 默认会自动忽略 NaN,若需保留,可结合 dropna=False 使用。


📦 结语

透视表不是Excel的专利!
用 Python 的 pandas.pivot_table(),你不仅能实现同样功能,还能自动化、可复用、可扩展

所有代码无需外部文件,复制即跑!
快去试试吧~


❤️ 如果你觉得有用,请点赞 + 在看 + 转发!
让更多人告别手动汇总,拥抱高效数据分析!


Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐