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

数据统计及透视表

        在数据处理中,高效的统计分析和灵活的数据整合是非常关键的环节,接下来我们就从数据的分组统计、数据移位、数据合并到数据透视表,一步步展开。

一、数据的分组统计

首先,我们来看数据的分组统计。在处理大量数据时,我们常常需要按特定条件将数据拆分,对每组数据单独分析后再整合结果,这时候就需要用到分组统计的核心工具 ——groupby()函数。

1. groupby()函数的核心功能

groupby()函数主要做三件事:一是根据给定条件将数据拆分成组;二是对每个组独立应用函数;三是将结果合并到一个数据结构中。

它的参数很丰富,比如by用于指定分组依据,可以是映射、字典、数组、标签等;axis指定分组方向,0 为按列分组,1 为按行分组;as_index控制是否将组标签作为索引,默认是 True。这些参数能帮我们灵活定义分组规则。

2. 分组统计的常见场景

  1. 按一列分组:比如根据图书 “一级分类” 统计订单数据,我们可以快速得到 “数据库”“移动开发” 等分类的 7 天点击量、订单预定等汇总结果。
  2. 按多列分组:如果我们想更细致地分析,比如按 “一级分类” 和 “二级分类” 分组,就能看到 “数据库” 下 “Oracle”“SQL”,“编程语言与程序设计” 下 “Java”“Python” 等更细分的数据。
  3. 指定列计算:有时我们只关注某一列的统计结果,比如统计各编程语言的 7 天点击量,就可以先按 “二级分类” 分组,再抽取 “7 天点击量” 列求和。

3. 分组数据的进阶操作

  1. 分组迭代:如果需要逐个查看每组数据,比如迭代 “一级分类” 下的订单数据,能直观看到每个分类的详细记录;甚至可以迭代两级分类,通过for (key1,key2),group in df.groupby([1,2])的方式实现。
  2. 聚合函数agg():对分组数据应用聚合函数时,agg()非常灵活。比如按 “一级分类” 分组后,我们可以同时计算 “7 天点击量” 的平均值和总和、“订单预定” 的总和;还能针对不同列指定不同聚合方式,甚至用自定义函数,比如统计 1 月份购买次数最多的产品。
  3. 通过字典和 Series 分组:当需要自定义分组规则时,比如将 “北京、上海、广州” 合并为 “北上广” 统计销量,我们可以用字典或 Series 指定映射关系,再传给groupby()实现。

二、数据移位

接下来我们看数据移位,这是一个很实用的小工具,主要通过shift()方法实现。

1. 什么是数据移位?

简单说,就是将数据按指定幅度上下或左右移动,移动后没有对应值的位置用NaN填充。比如学生的英语周测成绩,我们想知道每周成绩的升降,就可以用移位后的数据与原数据相减。

2. shift()方法的参数

  1. periods:移动幅度,正数向下 / 右移,负数向上 / 左移,默认 1。
  2. axis:移动方向,0 为行方向,1 为列方向。
  3. freq:仅用于时间序列,移动时间索引而不改变数据。

比如统计学生英语成绩升降,用df['英语'] - df['英语'].shift(1),就能直接得到每周的成绩变化量,非常直观。

三、数据合并

在实际工作中,数据往往分散在不同表格中,这时候就需要数据合并。我们主要讲三个方法:merge()concat()merge_asof()

1. merge()方法:灵活的关联合并

merge()类似 SQL 的连接,能根据共同列或索引将两个表合并,支持多种合并类型:

  1. 内连接(inner:只保留两边都有的键;
  2. 左连接(left:保留左表所有键,右表没有的用NaN填充;
  3. 右连接(right:保留右表所有键;
  4. 外连接(outer:保留两边所有键。

比如合并学生的 “语数英成绩表” 和 “体育成绩表”,通过 “编号” 作为共同键,就能得到包含所有科目成绩的完整表。它的参数on指定连接键,left_on/right_on可指定两边不同名的键,validate还能检查合并是否为 “1:1”“1:m” 等类型,确保数据准确性。

2. concat()方法:拼接多个表

concat()更适合多个结构相似的表拼接,可纵向(axis=0)或横向(axis=1)拼接:

  1. 纵向拼接:比如将 1 月、2 月、3 月的销售数据首尾相接,用keys参数还能标记数据来源。
  2. 横向拼接:按列对齐拼接,join='outer'保留所有列,join='inner'只保留共同列。

比如将包含 “ABC 列” 的表和 “DEF 列” 的表横向拼接,就能得到包含 ABCDEF 列的新表。

3. merge_asof()方法:最近合并

当我们需要根据 “最接近的键” 合并数据时,用merge_asof()。比如两个表都有 “编号”,但编号不完全一致,它会找到右表中小于等于左表键的最近值进行合并,适合时间序列或有序数据的近似匹配。

四、数据透视表

最后,我们来学习数据透视表,它是快速汇总、分析数据的利器,主要有pivot()pivot_table()两个方法。

1. 透视表的优势

  1. 更快:一键生成汇总结果;
  2. 自我记录:结构清晰,能直观看到分组依据;
  3. 易使用:可直接用于报告或邮件;
  4. 灵活:支持自定义聚合函数。

2. pivot()方法:简单重塑数据

pivot()用于将长表重塑为宽表,参数index指定行索引,columns指定列索引,values指定填充值。比如有 “客户、月份、销售额” 的表,用pivot(index='客户', columns='月份', values='销售额'),就能得到每个客户每月销售额的矩阵表。

3. pivot_table()方法:强大的汇总工具

pivot_table()pivot()更灵活,支持聚合计算,参数aggfunc可指定聚合函数(默认平均值),margins可添加总计行 / 列。比如按 “部门” 和 “性别” 统计人数,用aggfunc='count'就能快速得到每个部门男女生的数量,还能一键添加 “总计”。

总结

今天我们学习了数据统计与透视表的核心内容:从用groupby()实现灵活的分组统计,到shift()处理数据移位,再到merge()/concat()/merge_asof()进行数据合并,最后用pivot()/pivot_table()生成透视表。这些工具能帮我们从杂乱的数据中快速提取有价值的信息,希望大家在实际工作中多练习,熟练掌握它们的用法。

http://www.dtcms.com/a/275785.html

相关文章:

  • 使用Java完成下面项目
  • 引入了模块但没有使用”,会不会被打包进去
  • 【科研绘图系列】R语言绘制小提琴图
  • 基于定制开发开源AI智能名片S2B2C商城小程序的社群游戏定制策略研究
  • cuDNN 的 IMPLICIT_GEMM 算法
  • 【数据结构初阶】--顺序表(二)
  • 浅谈 Pydantic v2 的 RootModel 与联合类型——构建多请求结构的统一入口模型
  • 钉钉企业应用开发实战:从零构建组织级业务工具
  • 【LeetCode453.最小操作次数使数组元素相等】
  • leetcode-链表排序
  • Matlab中optimoptions的用法
  • docker 443错误 lookup docker.mirrors.ustc.edu.cn: no such host
  • Hap包引用的Hsp报签名错误怎么解决
  • ABSD(基于架构的软件开发)深度解析:架构驱动的工程范式
  • 初学者关于算法复杂度的学习笔记
  • goframe框架中获取url内容并转成Base64字符串
  • 【QGC】深入解析 QGC 配置管理
  • AAAI-2025 | 西交模拟人类空间推理策略的具身导航!REGNav:房间专家引导的图像目标导航
  • Linux文件的权限
  • Kotlin基础学习记录
  • 【MediaSoup】MS_DUMP打印转换为PLOGI的形式
  • Python-难点-uinttest
  • 网络资源模板--基于Android Studio 实现的记事本App
  • 通过卫星图像追踪城市扩张
  • Windows npx n8n 方式运行n8n密码忘了重置密码
  • IDEA中一个服务创建多个实例
  • PyQt5布局管理(QBoxLayout(框布局))
  • 企业商业秘密保卫战:经营信息类案件维权全攻略
  • WildCard野卡已跑路(包含gpt plus升级方案)
  • C++结构体嵌套