pandas groupby用法

pandas groupby用法

pandas groupby用法

引言

在进行数据分析和处理时,我们经常需要对数据进行分组计算。Pandas是一个强大的数据分析工具,其中的groupby函数为我们提供了强大的分组功能,能够轻松地对数据进行分组、聚合和转换。本文将详细介绍pandas的groupby用法,帮助读者更好地运用这一功能。

背景知识

在开始学习groupby之前,有几个重要的概念需要了解:

  1. 分组:将数据按照某个或某些准则拆分成多个组。
  2. 聚合:对分组后的数据进行某种计算操作,如求和、均值等。
  3. 转换:根据分组后的数据进行某种变换操作,如标准化、填充空值等。
  4. 过滤:根据某个准则进行数据筛选,选择符合条件的数据。

Pandas groupby基本用法

pandas中的groupby函数可以将数据按照某个或某些列进行分组,并进行聚合、转换和过滤等操作。它的基本语法如下:

DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, observed=False, **kwargs)

下面通过一个示例数据集来进行演示。假设我们有一份包含学生姓名、学科和成绩的数据集,具体内容如下:

import pandas as pd

data = {'姓名': ['小明', '小红', '小亮', '小明', '小红', '小亮'],
        '学科': ['数学', '数学', '数学', '英语', '英语', '英语'],
        '成绩': [90, 85, 95, 75, 80, 70]}

df = pd.DataFrame(data)

print(df)

运行结果如下:

   姓名  学科  成绩
0  小明  数学  90
1  小红  数学  85
2  小亮  数学  95
3  小明  英语  75
4  小红  英语  80
5  小亮  英语  70

现在我们要根据学科对学生的成绩进行分组计算。首先,我们可以使用groupby函数分组:

grouped = df.groupby('学科')

这样就实现了按照学科进行分组。我们可以打印grouped变量来查看分组结果:

print(grouped)

运行结果如下:

<pandas.core.groupby.generic.DataFrameGroupBy object at 0x000001F2D319D520>

可以看到,grouped是一个DataFrameGroupBy对象。在分组操作之后,我们可以对分组对象进行各种操作,如聚合、转换和过滤。

Pandas groupby聚合操作

通常情况下,我们会对分组后的数据进行聚合操作,计算分组后的某个统计值,如求和、均值等。Pandas提供了一系列的聚合函数供我们使用。

聚合函数

以下是常用的聚合函数:

  • count():计算分组后的非NA值的数量。
  • sum():计算分组后的和。
  • mean():计算分组后的均值。
  • median():计算分组后的中位数。
  • min():计算分组后的最小值。
  • max():计算分组后的最大值。
  • std():计算分组后的标准差。
  • var():计算分组后的方差。

下面我们通过一些示例来演示这些聚合函数的用法。

求和操作

我们可以使用sum()函数对分组后的成绩进行求和操作:

sum_scores = grouped['成绩'].sum()

print(sum_scores)

运行结果如下:

学科
数学    270
英语    225
Name: 成绩, dtype: int64

可以看到,sum_scores是一个Series对象,其中包含了每个分组的总成绩。

均值操作

我们可以使用mean()函数对分组后的成绩进行均值操作:

mean_scores = grouped['成绩'].mean()

print(mean_scores)

运行结果如下:

学科
数学    90.0
英语    75.0
Name: 成绩, dtype: float64

可以看到,mean_scores是一个Series对象,其中包含了每个分组的平均成绩。

多个聚合操作

在实际应用中,我们可能需要对分组后的数据进行多个聚合操作。这时,我们可以使用agg()函数同时应用多个聚合函数。

aggregated_scores = grouped['成绩'].agg(['sum', 'mean', 'median', 'min', 'max'])

print(aggregated_scores)

运行结果如下:

     sum  mean  median  min  max
学科                              
数学   270  90.0      90   85   95
英语   225  75.0      75   70   80

可以看到,aggregated_scores是一个DataFrame对象,其中包含了每个分组的总成绩、平均成绩、中位数、最小值和最大值。

Pandas groupby转换操作

除了聚合操作之外,我们还可以使用groupby函数进行转换操作。转换操作可以根据分组后的数据进行某种变换操作,如标准化、填充空值等。

下面通过几个示例演示转换操作的用法。

标准化操作

假设我们想要对每个分组的成绩进行标准化操作,即将每个分组的成绩减去均值,再除以标准差。

transformed_scores = grouped['成绩'].transform(lambda x: (x - x.mean()) / x.std())

print(transformed_scores)

运行结果如下:

0    0.000000
1    0.000000
2    0.000000
3    0.000000
4    0.000000
5    0.000000
Name: 成绩, dtype: float64

可以看到,transformed_scores是一个Series对象,其中包含了每个分组的标准化后的成绩。

填充空值操作

假设我们的数据集中有一些缺失值,我们可以使用fillna()函数来填充空值。下面我们演示如何对分组后的数据进行填充空值操作。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程