Pandas Groupby 函数:功能概述
作者:社区 / 开发者
2024 年 1 月 3 日
导航至
Python 凭借其广泛的库,处于编程用例的最前沿。其中一个库是 pandas。Pandas 可用于处理大型和复杂的数据集。它包含大量函数和方法,允许用户操作、分析和可视化数据。pandas 的函数之一是 Groupby。这篇文章是关于 Groupby 函数、其语法以及一些示例用例。本教程面向刚开始使用 Groupby 函数并打算将其用于应用程序的开发人员。
什么是 Pandas Groupby?
Pandas Groupby 经常用于数据分析。它允许您对数据进行分组,然后对分组数据执行某些函数或聚合。这些组是根据某些类别生成的。假设您有一个数据集,其中包含有关汽车型号、公司及其价格的信息。Groupby 允许您通过按公司对数据集进行分组,然后对值应用平均值函数,来查找每家公司的汽车平均成本。
语法
让我们首先概述 Pandas Groupby 函数的语法。
df.groupby(by=None, axis=0,sort=True)
除了上述参数外,Groupby 函数还有多个参数,可以以各种组合使用以实现所需的结果。下面解释了上面显示的语法
-
by:此参数接受函数或映射。它用于指定应如何对日期进行分组,并允许您定义应在其上分组的标准。
-
axis:axis 参数是一个整数。它确定分组应沿数据帧的行 (0) 还是列 (1) 进行。将其设置为 0 表示沿行拆分,设置为 1 表示沿列拆分。
-
sort:将其设置为 true 允许您对组键进行排序。
Pandas Groupby 示例
在我们深入研究具体示例之前,让我们了解一下 pandas 中的数据帧是什么。数据帧是 pandas 中的核心数据结构。它们提供了有意义的 Groupby 函数所需的上下文和结构。
数据帧是一个二维数据结构。它将数据排序到行和列中。简单来说,数据帧可以被认为是一个表格。让我们创建一个简单的数据帧
Import pandas as pd df = pd.DataFrame({"Name": ['Ali', 'Ben'], "Age": [23, 32]}) print(df)
上面代码的输出如下所示: 姓名 和 年龄 代表列名。整数 0 和 1 代表每行的索引。现在我们知道什么是数据帧了,让我们从 repo 读取数据
noaa-ndbc-data/latest-observations.csv using Pandas df = pd.read_csv('latest-observations.csv')
像这样读取数据将为我们提供一个数据帧作为输出,正如我们在这里看到的: 现在,假设我们有给定的数据,我们想更深入地了解它以进行数据分析。我们可以使用 Python Groupby 函数。让我们先看看可用的列
col_names = list(df.columns) col_names
假设我们要查找风速唯一值的计数。我们运行以下命令
result = df.groupby('wind_speed_mps').size().reset_index(name='Count')
print(result)
输出显示了每个 wind_speed 值的计数。 此数据使我们能够理解 1.0 mps 是最常见的风速,因为它是最常出现的数字。另一方面,风速 1.6、2.3、3.5 和 4.7 仅出现一次。
Pandas Groupby:多列
您还可以在 pandas 中按多列分组。假设我们要同时计算阵风和风速。我们可以修改我的原始命令以适应此更改,而不是运行两个单独的命令
result = df.groupby(['wind_speed_mps', 'gust_speed_mps']).size().reset_index(name='Count')
生成的数据帧如下所示: 此命令基本上是在给定风速为某个值的情况下查找阵风速度的出现次数。因此,对于风速 0.0 和阵风速度 0.0,我们有 6 个计数。但是当风速为 0 且阵风为 0.5 时,计数为 7。因此,它创建了一个某种类型的层次结构。
Pandas Groupby:聚合
Groupby 还包含一个聚合函数,它允许您对数据进行分组并应用所选的聚合函数。当您拥有大量数据并且想要对其进行聚类以使其简洁时,这是一个非常有用的工具。假设我们想要通过按风速对数据进行分组来查找所有值的计数。这可以通过以下命令轻松实现
result = df.groupby(['wind_speed_mps']).aggregate('count') result
wind_speed 现在是我们数据帧的索引,并且所有列的计数也存在。如果我们将聚合函数从 count 更改为 mean,输出也会更改。
result = df.groupby(['wind_speed_mps']).aggregate(‘mean’) result
我们现在知道,对于 1.0 mps 的风速,平均阵风速度为 1.81 mps。我们可以在此处应用不同的聚合函数,例如 sum。
Pandas Groupby:平均值
我们还可以使用 Groupby 平均值命令来查找不同列的平均值。假设我想找出每个站点的所有这些属性的平均值。为了做到这一点,我们可以执行以下命令。
df.groupby(['station_id']).mean() We get the following as an output
对于每个站点 ID,我们都会获得平均 wind_dir_degt、wind_speed 等。但是,如果我们只需要查找每个站点的平均海平面气压怎么办?我们会将我的原始命令更改为以下命令
df.groupby(['station_id'])['sea_level_pressure_hpa'].mean()
我们将获得以下数据帧作为输出: 我们现在知道,对于 station_id 13009,没有 sea_level_pressure 的数据可用。这可能是数据中的错误,可能暗示着更大的问题。Python Groupby 使我们能够分析和发现数据中的错误。万岁!
Pandas Groupby:总和
同样,Groupby 具有 sum 函数,允许您对组求和。假设我们要查找每个站点的海平面气压总和。我们将执行以下命令
df.groupby('station_name')['sea_level_pressure_hpa'].sum()
我们现在可以看到针对每个站点记录的海平面总和。如果我们没有指定我们想要在其上求和的特定列,Python 将会给出数据帧中所有属性的总和。诸如此类的见解可以帮助我们发现数据中的异常情况,并了解是否存在我们应该注意的任何问题。
例如,在上面的案例中,我们看到 York Spit, VA 的海压总和为 0.0。这可能会引发一些问题。York Spit 站的数据测量是否存在问题?为什么从未记录过任何值?这些问题可以在更高层次上提出,并让您发现异常情况。
Pandas Groupby:应用
您可以在 pandas 中使用另一个非常有用的函数。Groupby apply 允许您将自定义函数应用于数据中的每个组。假设我们要查找每个站点的最大风速。运行以下命令
df.groupby('station_name').apply(lambda x: x['wind_speed_mps'].max())
我们还可以使用 apply 创建自定义函数。假设我们要查找风速和阵风速度之间差异的平均值。我们可以应用以下函数。
df.groupby('station_name').apply(lambda x: (x['wind_speed_mps'] - x['gust_speed_mps']).mean())
结果数据帧如下所示
主要要点
在这篇文章中,我们看到了 Python pandas Groupby 是一个有用的函数,它允许我们按不同的类别对数据进行分组,并在其上应用各种函数。正如我们之前看到的,这些函数也可以是自定义函数。
Groupby 是一个强大的工具,允许用户分析大型数据集、检测异常情况并了解模式和趋势。 InfluxDB 通过单个专用数据库为您的时间序列数据集提供实时洞察。享受低延迟、无限基数、原生 SQL 支持和卓越的数据压缩。 立即联系我们,了解我们如何帮助您满足编程需求。
这篇文章由 Ali Mannan Tirmizi 撰写。 Ali 是一位高级 DevOps 经理,专门从事 SaaS 文案写作。他拥有电气工程和物理学学位,并在制造 IT、DevOps 和社会影响领域担任过多个领导职务。