《Pandas 简易速速上手小册》第5章:Pandas 数据合并与重塑(2024 最新版)

news2025/7/6 18:33:36

在这里插入图片描述

文章目录

  • 5.1 数据合并:Concatenate 和 Merge
    • 5.1.1 基础知识
    • 5.1.2 重点案例:客户订单数据合并
    • 5.1.3 拓展案例一:产品目录和销售数据合并
    • 5.1.4 拓展案例二:员工信息和部门数据合并
  • 5.2 数据透视和重塑
    • 5.2.1 基础知识
    • 5.2.2 重点案例:销售数据透视
    • 5.2.3 拓展案例一:员工工时记录重塑
    • 5.2.4 拓展案例二:客户反馈调查结果聚合
  • 5.3 分组与聚合操作
    • 5.3.1 基础知识
    • 5.3.2 重点案例:电商销售数据分析
    • 5.3.3 拓展案例一:员工绩效评分统计
    • 5.3.4 拓展案例二:客户反馈分析

5.1 数据合并:Concatenate 和 Merge

合并数据是数据分析中的一项基本技能,它允许我们将不同来源的数据集整合在一起,以进行更全面的分析。

5.1.1 基础知识

  1. Concatenate: 使用 pd.concat() 可以沿着一条轴将多个对象堆叠到一起。适用于结构相同的数据框架合并。
  2. Merge: 使用 pd.merge() 根据一个或多个键将不同的数据集的行连接起来。类似于 SQL 中的 JOIN 操作。

5.1.2 重点案例:客户订单数据合并

假设你有两个数据集,一个包含客户的基本信息,另一个包含客户的订单信息,你需要将这两个数据集合并在一起。

数据准备

import pandas as pd

# 示例客户基本信息数据
customers_data = {
    'customer_id': [1, 2, 3],
    'name': ['Alice', 'Bob', 'Charlie']
}
customers_df = pd.DataFrame(customers_data)

# 示例订单信息数据
orders_data = {
    'order_id': ['A001', 'A002', 'A003'],
    'customer_id': [3, 1, 2],
    'order_value': [200, 150, 50]
}
orders_df = pd.DataFrame(orders_data)

合并数据

# 合并客户信息和订单信息
merged_df = pd.merge(customers_df, orders_df, on='customer_id')

5.1.3 拓展案例一:产品目录和销售数据合并

假设你有一个产品目录数据集和一个销售记录数据集,你需要将它们合并以分析每个产品的销售情况。

数据准备

# 示例产品目录数据
catalog_data = {
    'product_id': [101, 102, 103],
    'product_name': ['Product A', 'Product B', 'Product C']
}
catalog_df = pd.DataFrame(catalog_data)

# 示例销售记录数据
sales_data = {
    'sale_id': ['S001', 'S002', 'S003'],
    'product_id': [102, 103, 101],
    'units_sold': [3, 2, 5]
}
sales_df = pd.DataFrame(sales_data)

合并数据

# 合并产品目录和销售记录
merged_sales_df = pd.merge(catalog_df, sales_df, on='product_id')

5.1.4 拓展案例二:员工信息和部门数据合并

如果你有员工信息的数据集和部门信息的数据集,需要合并它们来分析每个部门的员工分布。

数据准备

# 示例员工信息数据
employees_data = {
    'employee_id': ['E01', 'E02', 'E03'],
    'employee_name': ['Emily', 'Dan', 'Sarah'],
    'department_id': ['D01', 'D02', 'D01']
}
employees_df = pd.DataFrame(employees_data)

# 示例部门信息数据
departments_data = {
    'department_id': ['D01', 'D02'],
    'department_name': ['HR', 'Tech']
}
departments_df = pd.DataFrame(departments_data)

合并数据

# 合并员工信息和部门信息
merged_employees_df = pd.merge(employees_df, departments_df, on='department_id')

通过这些案例,我们展示了如何使用 Pandas 的 concat()merge() 方法来合并数据。这些操作是数据预处理和分析中不可或缺的步骤,无论是合并客户订单数据、产品销售数据还是员工部门数据。

在这里插入图片描述


5.2 数据透视和重塑

数据透视和重塑是数据分析中的强大工具,允许我们重新组织数据,以便更好地分析和可视化。

5.2.1 基础知识

  1. Pivot: 使用 pivot() 方法可以重塑数据,并根据给定的索引/列值重新组织数据。
  2. Melt: melt() 方法用于将宽格式数据转换为长格式数据,是 pivot() 的反向操作。
  3. Pivot Table: pivot_table()pivot() 的扩展,支持对数据进行聚合。

5.2.2 重点案例:销售数据透视

假设你有一份销售数据,包含多个产品在不同月份的销售情况,你需要将数据透视,以便分析每个产品的销售趋势。

数据准备

import pandas as pd

# 示例销售数据
sales_data = {
    'month': ['January', 'February', 'January', 'February'],
    'product': ['A', 'A', 'B', 'B'],
    'sales': [100, 150, 200, 250]
}
sales_df = pd.DataFrame(sales_data)

数据透视

# 将数据透视,以月份为列展示每个产品的销售情况
pivot_sales_df = sales_df.pivot(index='product', columns='month', values='sales')

5.2.3 拓展案例一:员工工时记录重塑

处理一份员工每日工时的记录,需要将数据从长格式转换为宽格式,以便更好地分析员工的工作时间。

数据准备

# 示例员工工时数据
time_data = {
    'employee': ['Alice', 'Bob', 'Alice', 'Bob'],
    'date': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02'],
    'hours_worked': [8, 9, 7, 8]
}
time_df = pd.DataFrame(time_data)

重塑数据

# 将数据重塑为宽格式,显示每个员工每天的工时
pivot_time_df = time_df.pivot(index='date', columns='employee', values='hours_worked')

5.2.4 拓展案例二:客户反馈调查结果聚合

假设你有一份客户反馈调查的数据,包含客户对不同问题的评分,需要对数据进行聚合以分析平均评分。

数据准备

# 示例客户反馈数据
feedback_data = {
    'customer_id': [1, 1, 2, 2],
    'question': ['Service', 'Quality', 'Service', 'Quality'],
    'rating': [4, 5, 3, 4]
}
feedback_df = pd.DataFrame(feedback_data)

创建数据透视表

# 创建数据透视表,计算每个问题的平均评分
pivot_feedback_df = feedback_df.pivot_table(index='question', values='rating', aggfunc='mean')

通过这些案例,我们展示了如何使用 Pandas 的数据透视和重塑功能来改变数据的组织方式。无论是分析销售趋势、员工工时还是客户反馈,这些技巧都能帮助你从数据中获得更深入的洞见。

在这里插入图片描述


5.3 分组与聚合操作

分组与聚合是数据分析中的核心操作,它们允许我们对数据集进行分段,并对每个段应用汇总统计,以便进行比较和模式识别。

5.3.1 基础知识

  1. GroupBy: 使用 groupby() 方法可以根据某个或某些列的值将数据分组。这对于分析子集内的统计数据非常有用。
  2. 聚合函数: 一旦数据被分组,就可以对分组应用多种聚合函数,如 sum()mean()max()min() 等,来计算统计数据。
  3. Transform: transform() 方法可以用来对分组数据应用一个函数,而且返回的对象与原始数据大小相同。
  4. Filter: filter() 方法允许你根据布尔条件过滤数据,对于去除或保留某些组非常有用。

5.3.2 重点案例:电商销售数据分析

假设你正在处理一份电商平台的销售数据,需要分析每个产品类别的总销售额。

数据准备

import pandas as pd

# 示例电商销售数据
ecommerce_data = {
    'category': ['Electronics', 'Clothing', 'Home & Garden', 'Electronics', 'Clothing'],
    'sales': [200, 150, 300, 250, 100]
}
ecommerce_df = pd.DataFrame(ecommerce_data)

分组与聚合

# 按产品类别分组并计算总销售额
category_sales = ecommerce_df.groupby('category').sum()

5.3.3 拓展案例一:员工绩效评分统计

处理一份员工绩效评分的数据,需要计算每个部门的平均绩效评分。

数据准备

# 示例员工绩效评分数据
performance_data = {
    'department': ['HR', 'Tech', 'HR', 'Tech', 'HR'],
    'score': [3, 4, 2, 5, 4]
}
performance_df = pd.DataFrame(performance_data)

计算平均绩效评分

# 按部门分组并计算平均绩效评分
department_performance = performance_df.groupby('department').mean()

5.3.4 拓展案例二:客户反馈分析

假设你有一份关于客户服务满意度的调查数据,需要过滤出平均评分低于3的服务类型。

数据准备

# 示例客户服务满意度数据
feedback_data = {
    'service_type': ['Delivery', 'Product Quality', 'Customer Support', 'Delivery', 'Product Quality'],
    'rating': [2, 5, 3, 1, 4]
}
feedback_df = pd.DataFrame(feedback_data)

过滤服务类型

# 计算服务类型的平均评分并过滤出平均评分低于3的类型
low_rating_service = feedback_df.groupby('service_type').filter(lambda x: x['rating'].mean() < 3)

通过这些案例,我们演示了如何在 Pandas 中进行分组与聚合操作,以及如何使用这些操作对数据进行分析。无论是处理电商销售数据、员工绩效评分,还是客户反馈,分组与聚合都是获取洞见的强大工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1427472.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

保姆级系列:各种打印机驱动的安装和使用

保姆级系列&#xff1a;各种打印机驱动的安装和使用 1.介绍2.下载3.安装4.实践教程5.总结 1.介绍 市面上打印机品牌和型号众多&#xff0c;打印机接口目前主要分为如下几种&#xff1a; 逻辑端口&#xff1a;TCP/IP、WSD、USB、LPT、COM 物理端口&#xff1a;RJ45、DB15母、US…

JDK1.8源码环境搭建介绍

目录 一、环境说明 1.1 JDK 1.8 1.2 IDEA 二、搭建过程说明 2.1 创建Java工程 2.2 源码准备 2.2.1 查找源码 2.2.2 解压源码到工程中 2.3 更新SDK 2.3.1 更新工程SDK 2.3.1.1 新建SDK 2.3.1.2 更新工程SDK 2.4 测试 2.4.1 解决报错问题 2.4.1.1 解决 sun.awt.UNI…

C#,桌面游戏编程,数独游戏(Sudoku Game)的算法与源代码

本文包括以下内容&#xff1a; &#xff08;1&#xff09;数独游戏的核心算法&#xff1b; &#xff08;2&#xff09;数独游戏核心算法的源代码&#xff1b; &#xff08;3&#xff09;数独游戏的部分题目样本&#xff1b; &#xff08;4&#xff09;适老版《数独》的设计原则…

Mirus TransIT-X2® 在RNAi干扰实验中性能数据展示

不同RNAi干扰途径示意图 基因沉默相关功能研究在分子和细胞生物学中发挥着重要作用&#xff0c;化学转染也在该研究领域扮演者重要角色。常见参与RNAi干扰途径的天然RNA分子包括&#xff1a; ★.小干扰 RNA (Small interfering RNAs, siRNA) &#xff1a;由双链 RNA(dsRNA)断裂…

第0章 Linux 基础入门

第0章 Linux 基础入门 RHCSA Red Hat Certified System Administrator 红帽认证系统管理员。 什么是计算机 计算机的组成&#xff1a; 控制器 运算器 存储器 输出设备 输入设备 计算机只能识别0和1&#xff0c;也就是二进制数。 为什么要学习Linux Linux 因其高效率…

零基础爬什么值得买的榜单——爬虫练习题目一(答二)

新问题总在解决老问题之后出现 引言原因正文 开整方法一代码运行效果 方法二代码运行结果 推荐 补充两个请求头的参数知识RefererUser-Agent 结尾 引言 今天心情不是很好 但是得更新呀 其实我写博客的一方面 也是希望大家能够监督我 让我尽量少情绪化 保持一个应有的速率做正确…

【VSCode 光标返回上一位置】

默认按键 Windows: Alt ← ;或者 鼠标侧键 Linux: Ctrl Alt - ;貌似数字键盘的减号没效果 Mac: Ctrl - 自定义修改方法&#xff1a; VSCode左下角 “管理 / Manage” “键盘快捷方式 / KeyBoard Shortcuts” 搜索 “前进 / Go Forward 或 后退 / Go Back” 双击需…

PySpark(二)RDD基础、RDD常见算子

目录 RDD RDD五大特性 RDD创建 RDD算子 常见的Transformation算子 map flatMap mapValues reduceByKey groupBy filter distinct union join intersection glom groupByKey groupByKey和reduceByKey的区别 ? sortBy sortByKey 常见的action算子 countByKey…

npm ERR! reason: certificate has expired(淘宝镜像过期)

npm ERR! request to https://registry.npm.taobao.org/yauzl/-/yauzl-2.4.1.tgz failed, reason: certificate has expired 今天在执行npm install命令时&#xff0c;报错百度了下是淘宝证书过期原因 解决方法一 执行下面两个命令再进行npm install即可 npm cache clean --…

LangChain结合通义千问的自建知识库

LangChain结合通义千问的自建知识库 在使用了通义千问API了之后&#xff0c;下一步就是构建知识库文档&#xff0c;使用了比较有名的LangChian&#xff0c;最后成果将自己的txt生成了知识向量库&#xff0c;最后我还把自己的论文生成了一个知识向量库&#xff0c;然后问他我的…

测试环境搭建整套大数据系统(一:基础配置,修改hostname,hosts,免密,时间同步)

一&#xff1a;使用服务器配置。 二&#xff1a;修改服务器名称hostname&#xff0c;hosts。 在 Linux 系统中&#xff0c;hostname 和 /etc/hosts 文件分别用于管理主机名和主机名解析。 在三台服务器上&#xff0c;分别执行以下命令。 vim /etc/hostnamexdso-hadoop-test-0…

Linux内核调参常用整理

一、【写在前面】 Linux内核调参是一个重要知识&#xff0c;这篇文章总结一下常见的参数用法。 调参位置在 /etc/sysctl.conf中或者sysctl.d 区别是&#xff1a; /etc/sysctl.conf 文件&#xff1a; 这是默认的主配置文件&#xff0c;包含了系统上所有的 sysctl 参数配置。所…

maven打包spring项目

常用的Maven命令如下 命令 说明mvn clean 清理Maven 项目。会删除目标路径(一般是target目录)Maven生成的打包文件,编译文件。mvn package 打包Maven项目,会生成jar 或者war文件。mvn test 执行test目录下的测试用例。mvn deploy 发布依赖到远端mvn site 生成…

Leetcode206:反转链表

一、题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表 示例&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]输入&#xff1a;head [] 输出&#xff1…

面试经典 150 题 -- 滑动窗口 (总结)

面试经典150题链接 面试经典 150 题 - 学习计划 - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台 209 . 长度最小的子数组 思路 : 滑动窗口的思想&#xff0c;取ij0,向后遍历j,记录前缀和[l,r]为s,如果s>target,那么左端点向右移动&#xff0c;直到s…

net 一台路由器如何让两个不同网段的终端可以通信。

# 终端设备自己设置就行了 # 路由器的设置 The device is running! #################################################### <Huawei> Feb 1 2024 21:21:09-08:00 Huawei %%01IFPDT/4/IF_STATE(l)[0]:Interface GigabitEt hernet0/0/0 has turned into UP state. <…

Linux系统——防火墙

一、防火墙的认识 引言 安全技术 入侵检测系统&#xff08;Intrusion Detection Systems&#xff09;&#xff1a;特点是不阻断任何网络访问&#xff0c;量化、定位来自内外网络的威胁情况&#xff0c;主要以提供报警和事后监督为主&#xff0c;提供有针对性的指导措施和安全…

POI word操作,如何使表格单元格文本内容垂直/水平居中(两行代码解决)

垂直居中&#xff1a;cell本身就有垂直对齐的api&#xff0c;一行代码就够。 水平居中&#xff1a;一般方式行不通&#xff0c;网上苦找了许多方式&#xff0c;代码都太长了&#xff0c;&#xff0c;忒麻烦。于是我突发奇想&#xff0c;发现可以利用paragraph的水平居中对齐方…

Flask 入门3:Flask 请求上下文与请求

1. 前言 Flask 在处理请求与响应的过程&#xff1a; 首先我们从浏览器发送一个请求到服务端&#xff0c;由 Flask 接收了这个请求以后&#xff0c;这个请求将会由路由系统接收。然后在路由系统中&#xff0c;还可以挂入一些 “勾子”&#xff0c;在进入我们的 viewFunction …

小白水平理解面试经典题目_数组类Leetcode 412. Fizz Buzz【数学解法】

412 FizzBuzz 小白渣翻译&#xff1a; 给定一个整数 n &#xff0c;返回一个字符串数组 answer &#xff08;从 1 开始索引&#xff09;&#xff0c;其中&#xff1a; answer[i] “FizzBuzz” 如果 i 能被 3 和 5 整除。answer[i] “Fizz” 如果 i 能被 3 整除。answer[i]…