pandas groupby用法
引言
在进行数据分析和处理时,我们经常需要对数据进行分组计算。Pandas是一个强大的数据分析工具,其中的groupby函数为我们提供了强大的分组功能,能够轻松地对数据进行分组、聚合和转换。本文将详细介绍pandas的groupby用法,帮助读者更好地运用这一功能。
背景知识
在开始学习groupby之前,有几个重要的概念需要了解:
- 分组:将数据按照某个或某些准则拆分成多个组。
- 聚合:对分组后的数据进行某种计算操作,如求和、均值等。
- 转换:根据分组后的数据进行某种变换操作,如标准化、填充空值等。
- 过滤:根据某个准则进行数据筛选,选择符合条件的数据。
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()
函数来填充空值。下面我们演示如何对分组后的数据进行填充空值操作。