Python案例如何实现数据透视表?

wen python案例 2

本文目录导读:

Python案例如何实现数据透视表?

  1. 基础案例
  2. 创建数据透视表
  3. 多维度数据透视表
  4. 多种聚合函数
  5. 添加总计和小计
  6. 实际案例分析
  7. 高级用法 - 自定义聚合函数
  8. 数据透视表的可视化
  9. 完整的实用函数

在Python中实现数据透视表,最常用的是pandas库的pivot_table函数,以下是完整的实现案例:

基础案例

import pandas as pd
import numpy as np
# 创建示例数据
data = {
    '日期': ['2024-01-01', '2024-01-01', '2024-01-02', '2024-01-02', '2024-01-03'],
    '产品': ['A', 'B', 'A', 'B', 'A'],
    '地区': ['华北', '华东', '华北', '华东', '华北'],
    '销售额': [100, 200, 150, 250, 300],
    '数量': [10, 20, 15, 25, 30]
}
df = pd.DataFrame(data)
print("原始数据:")
print(df)

创建数据透视表

# 基本数据透视表
pivot_table = pd.pivot_table(
    df,
    values='销售额',      # 要聚合的值
    index='日期',         # 行索引
    columns='产品',      # 列索引
    aggfunc='sum'        # 聚合函数
)
print("\n基本数据透视表:")
print(pivot_table)

多维度数据透视表

# 多维度数据透视表
pivot_multi = pd.pivot_table(
    df,
    values=['销售额', '数量'],
    index=['日期', '地区'],
    columns='产品',
    aggfunc='sum',
    fill_value=0  # 填充缺失值为0
)
print("\n多维数据透视表:")
print(pivot_multi)

多种聚合函数

# 使用多种聚合函数
pivot_agg = pd.pivot_table(
    df,
    values='销售额',
    index='产品',
    columns='地区',
    aggfunc=['sum', 'mean', 'count', 'max']
)
print("\n多种聚合函数:")
print(pivot_agg)

添加总计和小计

# 添加总计和小计
pivot_margins = pd.pivot_table(
    df,
    values='销售额',
    index='产品',
    columns='地区',
    aggfunc='sum',
    margins=True,          # 显示总计
    margins_name='总计'    # 总计的名称
)
print("\n带总计的数据透视表:")
print(pivot_margins)

实际案例分析

# 创建更复杂的数据集
np.random.seed(42)
sales_data = pd.DataFrame({
    '日期': pd.date_range('2024-01-01', periods=30, freq='D'),
    '产品': np.random.choice(['A', 'B', 'C'], 30),
    '地区': np.random.choice(['华北', '华东', '华南', '西南'], 30),
    '销售额': np.random.randint(100, 1000, 30),
    '利润': np.random.randint(10, 100, 30),
    '销售员': np.random.choice(['张三', '李四', '王五'], 30)
})
print("\n销售数据样例:")
print(sales_data.head())
# 创建月度、产品、地区的销售额汇总
sales_pivot = pd.pivot_table(
    sales_data,
    values='销售额',
    index='地区',
    columns='产品',
    aggfunc='sum',
    margins=True,
    fill_value=0
)
print("\n各地区各产品销售总额:")
print(sales_pivot)
# 按销售员和地区统计销售额和利润
sales_employee = pd.pivot_table(
    sales_data,
    values=['销售额', '利润'],
    index='销售员',
    columns='地区',
    aggfunc={'销售额': 'sum', '利润': 'mean'},
    fill_value=0
)
print("\n各销售员在不同地区的表现:")
print(sales_employee)

高级用法 - 自定义聚合函数

# 自定义聚合函数
def range_func(x):
    """计算范围(最大值-最小值)"""
    return x.max() - x.min()
pivot_custom = pd.pivot_table(
    sales_data,
    values='销售额',
    index='产品',
    columns='地区',
    aggfunc=[np.sum, np.mean, range_func]
)
print("\n自定义聚合函数:")
print(pivot_custom)

数据透视表的可视化

import matplotlib.pyplot as plt
import seaborn as sns
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据透视表并可视化
pivot_visual = pd.pivot_table(
    sales_data,
    values='销售额',
    index='产品',
    columns='地区',
    aggfunc='sum',
    fill_value=0
)
# 热力图展示
plt.figure(figsize=(10, 6))
sns.heatmap(pivot_visual, annot=True, fmt='.0f', cmap='YlOrRd')'各地区产品销售热力图')
plt.show()
# 柱状图展示
pivot_visual.plot(kind='bar', figsize=(12, 6))'各产品销售对比')
plt.xlabel('产品')
plt.ylabel('销售额')
plt.legend(title='地区')
plt.xticks(rotation=0)
plt.show()

完整的实用函数

def create_sales_pivot(dataframe, value_col='销售额', 
                      index_cols=['地区'], 
                      columns_cols=['产品'],
                      agg_func='sum'):
    """
    创建销售数据透视表的通用函数
    参数:
    dataframe: 数据框
    value_col: 值列名
    index_cols: 行索引列列表
    columns_cols: 列索引列列表
    agg_func: 聚合函数
    返回:数据透视表
    """
    try:
        pivot = pd.pivot_table(
            data=dataframe,
            values=value_col,
            index=index_cols,
            columns=columns_cols,
            aggfunc=agg_func,
            fill_value=0,
            margins=True,
            margins_name='合计'
        )
        return pivot
    except Exception as e:
        print(f"创建数据透视表时出错:{e}")
        return None
# 使用示例
result = create_sales_pivot(sales_data)
print("\n通用函数创建的数据透视表:")
print(result)

pandas的pivot_table函数提供了强大的数据透视功能:

  • index: 行索引
  • columns: 列索引
  • values: 要聚合的值
  • aggfunc: 聚合函数(sum, mean, count, max, min等)
  • fill_value: 填充缺失值
  • margins: 是否显示总计

通过这些功能,你可以轻松实现类似于Excel数据透视表的分析功能。

抱歉,评论功能暂时关闭!