百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

pandas入门教程 - 第十课: pandas的组操作

bigegpt 2025-02-09 11:26 9 浏览

Pandas 组操作简介

Pandas 的组操作(Group By)是数据处理中的核心功能之一,它允许我们对数据进行分组并对每个组进行操作,从而实现复杂的数据分析和处理任务。

分组操作的基础

在 Pandas 中,分组操作通常通过 groupby 方法实现。这个方法可以根据一个或多个列对数据进行分组。

单一列分组

当我们只想根据一列进行分组时,可以直接传递该列作为参数给 groupby 方法。

import pandas as pd

# 创建一个示例 DataFrame
data = {
    'Category': ['A', 'A', 'B', 'B', 'C', 'C'],
    'Value': [10, 20, 30, 40, 30, 20]
}

df = pd.DataFrame(data)

# 根据 'Category' 列进行分组
grouped = df.groupby('Category')

# 查看分组后的结果
print(grouped)

多列分组

如果我们想根据多个列进行分组,可以将这些列作为列表传递给 groupby 方法。

# 根据 'Category' 和 'Year' 列进行分组
grouped_multi = df.groupby(['Category', 'Value'])

# 查看分组后的结果
print(grouped_multi)

分组后的操作

分组操作完成后,我们可以对每个组进行各种操作,如聚合、转换和排序等。

聚合函数

聚合函数可以对数据进行汇总计算,如求和、平均值、最大值和最小值等。

# 计算每个类别的总和
total_per_category = grouped['Value'].sum()

# 计算每个类别的平均值
mean_per_category = grouped['Value'].mean()

# 查看结果
print(total_per_category)
print(mean_per_category)

转换函数

转换函数可以对数据进行转换操作,如计数、排序等。

# 计算每个类别的记录数量
count_per_category = grouped['Value'].count()

# 查看结果
print(count_per_category)

过滤和排序

我们还可以对分组后的数据进行过滤和排序操作。

# 过滤出 'Category' 为 'A' 的数据
filtered_category_a = grouped['Value'][grouped['Category'] == 'A']

# 对 'Category' 为 'A' 的数据进行降序排序
sorted_category_a = filtered_category_a.sort_values(ascending=False)

# 查看结果
print(sorted_category_a)

拆分、应用和组合(Split-Apply-Combine)

Split-Apply-Combine 是 Pandas 的一种强大的数据处理范式,它可以帮助我们更有效地进行数据分析。

拆分(Split)

拆分操作是指将数据集按照某些键分成多个子集。在 Pandas 中,这通常通过 groupby 方法实现。

# 根据 'Category' 列进行分组
grouped = df.groupby('Category')

# 拆分数据集
grouped_list = list(grouped)

# 查看拆分后的分组
for category, group in grouped_list:
    print(category)
    print(group)
A
  Category  Value
0        A     10
1        A     20
B
  Category  Value
2        B     30
3        B     40
C
  Category  Value
4        C     30
5        C     20

应用(Apply)

应用操作是指对每个分组应用一个函数,并收集结果。在 Pandas 中,这通常通过 apply 方法实现。

# 对每个分组应用自定义函数
def custom_function(group):
    return group['Value'].sum()

# 应用自定义函数
result = grouped.apply(custom_function)

# 查看结果
print(result)
Category
A    30
B    70
C    50
dtype: int64

组合(Combine)

组合操作是指将多个子集数据合并成一个整体。在 Pandas 中,这通常通过 concat 方法实现。

# 假设我们有多个分组的数据,并将它们存储在列表中
grouped_list = [grouped_1, grouped_2, grouped_3]

# 使用 concat 方法将它们合并
combined_df = pd.concat(grouped_list)

# 查看合并后的数据框
print(combined_df)

实践案例

在本节中,我们将通过一个实际案例来练习分组操作。我们将使用一个包含销售数据的 DataFrame,学习如何进行数据的分组和聚合分析,以了解不同产品类别的销售情况。

数据导入

首先,我们需要导入销售数据。

import pandas as pd

# 加载销售数据
df = pd.read_csv('sales_data.csv')

# 查看数据框的前几行
print(df.head())
  Product      Sales
0       A  83.612440
1       B  83.743698
2       C  88.536823
3       D  88.427858
4       E  81.554607

分组和聚合分析

接下来,我们将根据产品类别对销售数据进行分组,并计算每个类别的总销售额和平均销售额。

# 根据产品类别进行分组
grouped_by_product = df.groupby('Product')

# 计算总销售额
total_sales_by_product = grouped_by_product['Sales'].sum()

# 计算平均销售额
average_sales_by_product = grouped_by_product['Sales'].mean()

# 查看结果
print(total_sales_by_product)
print(average_sales_by_product)
  Product      Sales
0       A  83.612440
1       B  83.743698
2       C  88.536823
3       D  88.427858
4       E  81.554607
Product
A    522.415076
B    437.234533
C    446.066535
D    782.328957
E     81.554607
Name: Sales, dtype: float64
Product
A    87.069179
B    87.446907
C    89.213307
D    86.925440
E    81.554607
Name: Sales, dtype: float64

可视化分析

为了更直观地理解销售数据,我们可以使用 matplotlib 库来绘制图表。

import matplotlib.pyplot as plt

# 绘制总销售额的柱状图
plt.bar(total_sales_by_product.index, total_sales_by_product.values, color='blue')
plt.xlabel('Product')
plt.ylabel('Total Sales')
plt.title('Total Sales by Product Category')
plt.xticks(rotation=90)  # 旋转 x 轴刻度标签以提高可读性
plt.show()

# 绘制平均销售额的折线图
plt.plot(average_sales_by_product.index, average_sales_by_product.values, color='red')
plt.xlabel('Product')
plt.ylabel('Average Sales')
plt.title('Average Sales by Product Category')
plt.xticks(rotation=90)  # 旋转 x 轴刻度标签以提高可读性
plt.show()




总结

在本课程中,我们学习了 Pandas 的组操作功能,包括如何使用 groupby 方法对数据进行分组,如何使用聚合函数对数据进行汇总计算,以及如何使用拆分-应用-组合范式对数据进行复杂的分析。通过实践案例,我们学会了如何应用这些知识来解决实际问题,如分析销售数据。掌握这些技能将极大地提高我们在数据处理和分析方面的能力。

相关推荐

php-fpm的配置和优化

目录概述php-fpm配置php-fpm进程优化配置慢日志查询配置php7进阶到架构师相关阅读概述这是关于php进阶到架构之php7核心技术与实战学习的系列课程:php-fpm的配置和优化学习目标:理...

成功安装 Magento2.4.3最新版教程「技术干货」

外贸独立站设计公司xingbell.com经过多次的反复实验,最新版的magento2.4.3在oneinstack的环境下的详细安装教程如下:一.vps系统:LinuxCentOS7.7.19...

十分钟让你学会LNMP架构负载均衡

业务架构、应用架构、数据架构和技术架构一、几个基本概念1、pv值pv值(pageviews):页面的浏览量概念:一个网站的所有页面,在一天内,被浏览的总次数。(大型网站通常是上千万的级别)2、u...

php从远程URL获取(mp4 mp3)音视频的流媒体数据

/***从远程URL中获取媒体(如mp4mp3)的内容*@parammixed$file_url*@parammixed$media_type...

Zabbix5.0安装部署

全盘展示运行状态,减轻运维人员的重复性工作量,提高系统排错速度,加速运维知识学习积累。1.png1、环境安装关闭SELinux并重启系统2.png安装httpd、mariadb、php运行yum-...

php 常见配置详解

以下是PHP常见的配置项及其含义:error_reporting:设置错误报告级别,可以控制PHP显示哪些错误。例如,设置为E_ALL将显示所有错误,而设置为0将禁止显示任何错误。displa...

实践分享|基于基石智算 DeepSeek API + WordPress 插件自动生成访客回复

基石智算举办的DeepSeek案例大赛汇集了不少基于CoresHubDeepSeekAPI服务或模型部署服务的精彩实践。本次我们将分享个人实践:通过DeepSeekAPI+Word...

如何在Eclipse中搭建Zabbix源码的调试和开发环境

Zabbix是一款非常优秀的企业级软件,被设计用于对数万台服务器、虚拟机和网络设备的数百万个监控项进行实时监控。Zabbix是开放源码和免费的,这就意味着当出现bug时,我们可以很方便地通过调试源码来...

MySQL自我保护参数

#头条创作挑战赛#之前(MySQL自我保护工具--pt-kill)提到用pt-kill工具来kill相关的会话,来达到保护数据库的目的,本文再通过修改数据库参数的方式达到阻断长时间运行的SQL的目...

Python闭包深度解析:掌握数据封装的高级技巧

闭包作为Python高级编程特性之一,为开发者提供了一种优雅的方式来实现数据封装和状态保持。这一概念源于函数式编程理论,在现代Python开发中发挥着重要作用。理解和掌握闭包的使用不仅能够提升代码的表...

Java服务网格故障注入与熔断实战

在分布式系统的高可用性挑战中,服务网格的故障注入与熔断机制是检验系统韧性的终极试金石。以下是10道逐步升级的"地狱关卡",每个关卡都对应真实生产环境中可能遇到的致命场景,并附具体场景示...

MySQL数据库性能优化全攻略:程序员必知的七大核心策略

作为程序员,我们每天都要与数据库打交道。当系统用户量突破百万级时,数据库往往成为性能瓶颈的首要怀疑对象。本文将深入探讨MySQL优化的七大核心策略,并提供可直接落地的优化方案,助您构建高效稳定的数据库...

如何在 Windows 11 上使用单个命令安装 XAMPP

XAMPP是一种广泛使用的软件,用于在Windows操作系统上快速运行LAMP服务器包,包括Windows11。尽管LAMP通常用于Linux系统,但XAMPP并不使用Li...

uTorrent怎样将bt种子转换为磁力

如何用uTorrent把BT种子转为磁力链接?以下方法希望能帮到你。1、在uTorrent窗口里,点击工具栏的按钮,所示。2、在打开窗口里,选取要转为磁力的种子文件,然后点击打开按钮,参照图示操作...

支持向量机SVM 分类和回归的实例

支持向量机(SupportVectorMachine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他...