当前位置: 首页 > news >正文

Pandas 中透视表(`pivot_table`)和交叉表(`crosstab`)的区别

Pandas 中透视表(pivot_table)和交叉表(crosstab)的区别

核心区别

  1. 透视表 (pivot_table)

    • 用于对数据进行 聚合计算(如求和、均值、计数等)。
    • 支持多维度分组(行、列、甚至多层索引)。
    • 可以指定 values(要聚合的值)和 aggfunc(聚合函数)。
  2. 交叉表 (crosstab)

    • 专门用于 计算频率分布(即列联表,统计不同组合的出现次数)。
    • 默认行为是计数,但也可通过参数自定义聚合函数。
    • 语法更简洁,适合快速生成两个变量的交叉统计。

代码示例与逐行注释

import pandas as pd
import numpy as np

# 创建示例数据
data = {
    '区域': ['北区', '北区', '南区', '南区', '东区', '西区', '西区'],
    '产品类别': ['电子', '服装', '电子', '食品', '服装', '电子', '食品'],
    '销售额': [200, 150, 300, 80, 120, 250, 90],
    '季度': ['Q1', 'Q1', 'Q2', 'Q2', 'Q1', 'Q3', 'Q3']
}
df = pd.DataFrame(data)

# 使用透视表 (pivot_table)
# 目标:按区域和产品类别汇总销售额总和
pivot = pd.pivot_table(
    df,
    values='销售额',     # 要聚合的数值列
    index='区域',        # 行分组键
    columns='产品类别',  # 列分组键
    aggfunc=np.sum,      # 聚合函数(默认是均值)
    fill_value=0         # 缺失值填充为0
)
print("透视表结果:")
print(pivot)

# 使用交叉表 (crosstab)
# 目标:统计区域和产品类别的组合出现次数
crosstab = pd.crosstab(
    index=df['区域'],     # 行分类变量
    columns=df['产品类别'],  # 列分类变量
    margins=True,        # 显示总计
    margins_name='总计'   # 总计列的名称
)
print("\n交叉表结果:")
print(crosstab)

# 交叉表进阶:结合销售额求和(自定义聚合)
crosstab_agg = pd.crosstab(
    index=df['区域'],
    columns=df['产品类别'],
    values=df['销售额'],  # 指定要聚合的值
    aggfunc=np.sum,       # 聚合函数
    dropna=False
)
print("\n交叉表(销售额求和):")
print(crosstab_agg)

输出结果解析

  1. 透视表输出
    按区域和产品类别对 销售额 进行求和:

    产品类别  电子  服装   食品
    区域                  
    东区     0  120    0
    北区   200  150    0
    南区   300    0   80
    西区   250    0   90
    
  2. 交叉表(默认计数)
    统计区域和产品类别的组合出现次数:

    产品类别  电子  服装  食品  总计
    区域                     
    东区      0    1    0    1
    北区      1    1    0    2
    南区      1    0    1    2
    西区      1    0    1    2
    总计      3    2    2    7
    
  3. 交叉表(销售额求和)
    按区域和产品类别对 销售额 求和:

    产品类别    电子    服装     食品
    区域                        
    东区       NaN  120.0    NaN
    北区     200.0  150.0    NaN
    南区     300.0    NaN   80.0
    西区     250.0    NaN   90.0
    

关键参数对比

功能透视表 (pivot_table)交叉表 (crosstab)
主要用途多维度聚合计算频率分布统计(列联表)
默认聚合均值 (aggfunc='mean')计数 (aggfunc='count')
多维支持支持多行、多列、多层索引通常用于两个变量的交叉
填充缺失值fill_value 参数无直接参数,可通过 dropna 控制显示
语法简洁性较复杂,需明确指定 valuesaggfunc更简洁,适合快速生成频率表

通过选择合适的方法,可以高效实现数据汇总或分布统计的需求!

相关文章:

  • DeepSeek BLEU和ROUGE(Recall)的计算
  • torch.cat和torch.stack的区别
  • 应急响应靶机-Linux(1)
  • 数据结构*包装类泛型
  • C语言进阶之指针
  • CMD命令行笔记
  • 数据库实验:分组查询与聚集函数的使用
  • Vue3状态管理深度实战:Pinia架构设计与企业级应用
  • C#核心学习(十六)面向对象--关联知识点(2)string和Stringbuilder
  • 案例驱动的 IT 团队管理:创新与突破之路: 第四章 危机应对:从风险预见到创新破局-4.1.3重构过程中的团队士气管理
  • 202524 | 分布式事务
  • 《基于 RNN 的股票预测模型代码优化:从重塑到直接可视化》
  • 设计模式——抽象工厂模式总结
  • AcWing 6093. 不互质子序列
  • ubuntu 安装samba
  • 奇葩问题:PGPOOL自动容灾切换,主备不生效原因
  • 部署YUM仓库
  • 卡码网55:右旋字符串
  • 【android bluetooth 框架分析 02】【Module详解 3】【HciHal 模块介绍】
  • 【tRPC-go】message、context相关源码设计思路
  • 【社论】法治是对民营经济最好的促进
  • 专访 | 杜普兰蒂斯:爱上中国文化,下一步努力提升速度
  • 十四届全国人大常委会第十五次会议在京闭幕
  • 阿斯利康中国区一季度收入增5%,或面临最高800万美元新罚单
  • 160名老人报旅行团被扔服务区?张家界官方通报
  • 中行一季度净赚超543亿降2.9%,利息净收入降逾4%