Skip to content

透视表

透视表是数据分析中非常实用的工具,Pandas 提供了强大的透视表功能。

基本透视表

python
import pandas as pd
import numpy as np

df = pd.DataFrame({
    '日期': ['周一', '周一', '周二', '周二', '周三', '周三'],
    '产品': ['A', 'B', 'A', 'B', 'A', 'B'],
    '销量': [100, 150, 120, 180, 130, 160],
    '收入': [1000, 1500, 1200, 1800, 1300, 1600]
})

# 创建透视表
pivot = df.pivot_table(values='销量', index='日期', columns='产品')
print(pivot)

多维度透视

python
df = pd.DataFrame({
    '地区': ['北', '北', '南', '南', '北', '南'],
    '日期': ['周一', '周二', '周一', '周二', '周三', '周三'],
    '产品': ['A', 'A', 'B', 'B', 'A', 'B'],
    '销量': [100, 120, 150, 180, 130, 160]
})

# 多维度透视
pivot = df.pivot_table(
    values='销量',
    index=['地区', '日期'],
    columns='产品',
    aggfunc='sum'
)
print(pivot)

聚合函数

python
df = pd.DataFrame({
    '部门': ['技术', '技术', '销售', '销售', '技术'],
    '姓名': ['张三', '李四', '王五', '赵六', '孙七'],
    '工资': [8000, 9000, 6000, 7000, 8500]
})

# 使用不同聚合函数
pivot = df.pivot_table(
    values='工资',
    index='部门',
    aggfunc=['mean', 'sum', 'count', 'max', 'min']
)
print(pivot)

填充缺失值

python
df = pd.DataFrame({
    '日期': ['周一', '周一', '周二', '周二'],
    '产品': ['A', 'B', 'A', 'B'],
    '销量': [100, 150, 120, None]
})

# 填充缺失值
pivot = df.pivot_table(
    values='销量',
    index='日期',
    columns='产品',
    fill_value=0
)
print(pivot)

边际汇总

python
df = pd.DataFrame({
    '日期': ['周一', '周一', '周二', '周二'],
    '产品': ['A', 'B', 'A', 'B'],
    '销量': [100, 150, 120, 180]
})

# 添加行列总计
pivot = df.pivot_table(
    values='销量',
    index='日期',
    columns='产品',
    margins=True,
    margins_name='总计'
)
print(pivot)

交叉表

python
df = pd.DataFrame({
    '性别': ['男', '女', '男', '女', '男'],
    '部门': ['技术', '销售', '技术', '技术', '销售']
})

# 创建交叉表
cross = pd.crosstab(df['性别'], df['部门'])
print(cross)

# 添加总计
cross = pd.crosstab(df['性别'], df['部门'], margins=True)
print(cross)

# 百分比交叉表
cross = pd.crosstab(df['性别'], df['部门'], normalize='index')
print(cross)

多级透视

python
df = pd.DataFrame({
    '年': [2023, 2023, 2023, 2024, 2024],
    '月': [1, 2, 1, 1, 2],
    '产品': ['A', 'A', 'B', 'A', 'B'],
    '销量': [100, 120, 150, 110, 160]
})

# 多级透视
pivot = df.pivot_table(
    values='销量',
    index=['年', '月'],
    columns='产品',
    aggfunc='sum'
)
print(pivot)

透视表是数据分析的利器,可以快速地从不同维度分析数据。