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

在这里插入图片描述

文章目录

  • 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.mzph.cn/news/661156.shtml

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

相关文章

如何使用Cloudreve搭建私有云盘并发布公网访问无需购买域名服务器

文章目录 1、前言2、本地网站搭建2.1 环境使用2.2 支持组件选择2.3 网页安装2.4 测试和使用2.5 问题解决 3、本地网页发布3.1 cpolar云端设置3.2 cpolar本地设置 4、公网访问测试5、结语 1、前言 自云存储概念兴起已经有段时间了&#xff0c;各互联网大厂也纷纷加入战局&#…

路由重定向和别名

聚沙成塔每天进步一点点 本文内容 ⭐ 专栏简介1. 路由重定向实例场景&#xff1a;路由重定向的应用场景&#xff1a; 2. 路由别名实例场景&#xff1a;路由别名的应用场景&#xff1a; ⭐ 写在最后 ⭐ 专栏简介 Vue学习之旅的奇妙世界 欢迎大家来到 Vue 技能树参考资料专栏&…

备战蓝桥杯---数据结构与STL应用(进阶2)

本文将主要围绕有关map的今典应用展开&#xff1a; 下面我用图进行分析&#xff1a; 下面为AC代码&#xff1a; #include<bits/stdc.h> using namespace std; struct Point {int x,y;bool operator < (const Point & r) const {return x < r.x || ( x r.x &a…

Windows IIS服务如何配置并制作web站点结合内网穿透实现公网访问

文章目录 1. 安装IIS必要WebDav组件2. 客户端测试3. cpolar内网穿透3.1 打开Web-UI管理界面3.2 创建隧道3.3 查看在线隧道列表3.4 浏览器访问测试 4. 安装Raidrive客户端4.1 连接WebDav服务器4.2 连接成功4.2 连接成功总结&#xff1a; 自己用Windows Server搭建了家用NAS主机&…

【网络】:网络套接字(TCP)

网络套接字&#xff08;TCP&#xff09; 一.编写TCP服务器二.编写Tcp客户端三.多进程四.多线程版本五.线程池版完整源代码六.使用示例 一.编写TCP服务器 1.先搭一个架子 2.创建sockfd domain参数依然是AF_INET(因为是IPV4) type方式选择SOCK_STREAM&#xff08;提供可靠的连接…

从零开始学Linux之chkconfig命令

首先我们要知道Linux系统有以下7种运行级别&#xff0c;分别用0到6数字表示&#xff0c;这里使用红帽6系统做演示 0&#xff1a;关机 1&#xff1a;单用户模式&#xff0c;root用户免密登录&#xff0c;用于系统维护&#xff0c;例如忘记用户密码可以切换到该模式直接使用roo…

查看本地mysql的密码

1.导出链接 在数据库连接工具找到导出链接 导出到桌面即可&#xff0c;注意导出密码 2.复制密码 3.解密 复制如下代码到网址&#xff1a;代码在线运行 - 在线工具 (tool.lu) <?php namespace FatSmallTools; class NavicatPassword {protected $version 0;protected $a…

YOLOv5算法进阶改进(14)— 即插即用的动态卷积之ODConv | 助力涨点

​ 前言:Hello大家好,我是小哥谈。动态卷积(Dynamic Convolution)是一种用于目标检测的卷积神经网络模块,其中ODConv(Object Detection Convolution)是其一种具体实现。动态卷积在传统的卷积操作上引入了动态权重,以适应不同目标的形状和尺度变化。本文将YOLOv5的主干网…

Python实战:使用DrissionPage库爬取拉勾网职位信息

DrissionPage库&#xff0c;号称可以把Selenium按在地上摩擦&#xff01; 常规情况下&#xff0c;我们借助 requests 库爬取不加密的网站&#xff0c;使用 Selenium 库爬取加密的网站。 requests 效率高&#xff0c;但是解密难度大。Selenium 库可以实现网页自动化&#xff0c…

【星海随笔】RYU控制器(一)

Ryu is a component-based software defined networking framework.   Ryu是一个基于组件的软件定义网络框架 Ryu supports various protocols for managing network devices, such as OpenFlow, Netconf, OF-config, etc.   支持管理网络设备的多种协议 About OpenFlow, R…

Redis 布隆过滤器

布隆过滤器 这一篇文章主要是记录布隆过滤器的使用和认识 主要参考了如下的blog https://blog.csdn.net/weixin_42972832/article/details/131211665 他讲的还不错 简单的来说,布隆过滤器,实际上就像是一个集合,拿redis的key来举例来说,布隆过滤器的设置就是去过滤不属于redi…

视频融合平台EasyCVR推流成功但平台显示不在线是什么原因?

TSINGSEE青犀视频监控汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力&…

环形链表找入环点----链表OJ---三指针

https://leetcode.cn/problems/linked-list-cycle-ii/description/?envTypestudy-plan-v2&envIdtop-100-liked 首先&#xff0c;需要判断是否有环&#xff0c;而这里我们不单纯判断是否有环&#xff0c;还要为下一步做准备&#xff0c;需要让slow指针和fast都从头结点开始…

使用pygame建立一个简单的使用键盘方向键移动的方块小游戏

import pygame import sys# 初始化pygame pygame.init()# 设置窗口大小 screen_size (640, 480) # 创建窗口 screen pygame.display.set_mode(screen_size) # 设置窗口标题 pygame.display.set_caption("使用键盘方向键移动的方块的简单小游戏")# 设置颜色 bg_colo…

MQ回顾之rabbitmq速通

rabbitMQ相对来说功能比较完善&#xff0c;吞吐量会低一点。 持续更新…… 安装 docker 测试选择docker安装 官方安装操作 1、docker pull rabbitmq:latest 2、docker run -d --hostname my-rabbit --name some-rabbit -p 15672:15672 -p 5672:5672 rabbitmq 3、docker…

transformer_正余弦位置编码代码笔记

transformer_正余弦位置编码代码笔记 transformer输入的序列中&#xff0c;不同位置的相同词汇可能会表达不同的含义&#xff0c;通过考虑位置信息的不同来区分序列中不同位置的相同词汇。 位置编码有多种方式&#xff0c;此处仅记录正余弦位置编码 正余弦位置编码公式如下&…

idea+javafx的真正打包方式

概述&#xff1a;看到网上很多乱说javafx如何打包的&#xff0c;这里写一篇真正可以打包javafx的。 注&#xff1a;使用java17即使里面没有javafx&#xff0c;也是可以运行javafx项目的&#xff0c;只要你们按照下面一步一步来即可。 第一步&#xff1a;编写一个类去调用主类…

ArXiv| Graph-Toolformer: 基于ChatGPT增强提示以赋予大语言模型图数据推理能力

ArXiv| Graph-Toolformer: 基于ChatGPT增强提示以赋予大语言模型图数据推理能力. 来自加利福利亚大学戴维斯分校计算机科学系的IFM实验室发表在arXiv上的文章:“Graph-ToolFormer: To Empower LLMs with Graph Reasoning Ability via Prompt Augmented by ChatGPT”。 文章的…

2.1总结

还是一样水更一天&#xff0c;就随便做了几个题&#xff0c;有一个周期有点长&#xff0c;后面更一篇长的 随手刷的一道水题&#xff0c;就不往今天的行程单添了 问题&#xff1a;最大公约数 题解&#xff1a;题目太水了&#xff0c;就是求三个数&#xff0c;其中两组的最大公…

PyTorch识别验证码

## 一、生成测试集数据pip install captcha common.py import random import time captcha_array list("0123456789abcdefghijklmnopqrstuvwxyz") captcha_size 4from captcha.image import ImageCaptchaif __name__ __main__:for i in range(10):image ImageC…