pandas groupby分组后的结果

1. 引言
Pandas是一种常用的数据处理工具,提供了强大的数据处理和分析功能。其中,groupby函数是Pandas中常用的一个功能,它可以根据指定的条件将数据进行分组操作。本文将详细介绍Pandas中groupby函数的使用方法,并由浅入深地解析分组后的结果。
2. pandas groupby函数概述
groupby函数是Pandas中的一个重要函数,用于按照指定的一列或多列对数据进行分组操作。groupby函数的基本语法如下:
df.groupby(by=grouping_columns)[columns_to_show].function()
其中,by参数指定进行分组的列名或列名列表,columns_to_show参数指定需要展示的列名或列名列表,function参数指定对分组后的数据进行的计算或操作。
3. 分组后的结果
groupby函数返回的结果对象是一个DataFrameGroupBy对象,它包含了分组后的一组数据,可以对其进行多种操作。
3.1 查看分组后的数据
DataFrameGroupBy对象可以使用head()或tail()函数查看分组后的部分数据。
df.groupby(by=grouping_columns)[columns_to_show].function().head()
df.groupby(by=grouping_columns)[columns_to_show].function().tail()
示例代码如下:
import pandas as pd
# 创建一个DataFrame
data = {'Name': ['Tom', 'Nick', 'John', 'Tom', 'Nick', 'John'],
'Subject': ['Math', 'English', 'Math', 'English', 'Math', 'Math'],
'Score': [85, 90, 92, 78, 80, 95]}
df = pd.DataFrame(data)
# 按照Name分组后计算平均分
grouped = df.groupby('Name')['Score'].mean()
print(grouped.head())
结果输出如下:
Name
John 93.5
Nick 85.0
Tom 81.5
Name: Score, dtype: float64
上述示例中,我们首先创建了一个包含学生姓名、科目和成绩的DataFrame。然后,我们使用groupby函数按照姓名分组,并计算每个学生的平均成绩。最后,我们使用head()函数查看了分组后的前几行数据。
3.2 计算分组后的统计量
DataFrameGroupBy对象可以使用多种函数计算分组后的统计量,例如mean()、sum()、max()、min()等。
df.groupby(by=grouping_columns)[columns_to_show].function().agg(['mean', 'sum', 'max', 'min'])
示例代码如下:
import pandas as pd
# 创建一个DataFrame
data = {'Name': ['Tom', 'Nick', 'John', 'Tom', 'Nick', 'John'],
'Subject': ['Math', 'English', 'Math', 'English', 'Math', 'Math'],
'Score': [85, 90, 92, 78, 80, 95]}
df = pd.DataFrame(data)
# 按照Name分组后计算平均分、总分、最高分、最低分
grouped = df.groupby('Name')['Score'].agg(['mean', 'sum', 'max', 'min'])
print(grouped)
结果输出如下:
mean sum max min
Name
John 93.5 187 95 92
Nick 85.0 170 90 80
Tom 81.5 163 85 78
上述示例中,我们使用agg()函数计算了每个学生的平均成绩、总成绩、最高分和最低分。
3.3 应用自定义函数
在分组后的结果中,我们也可以应用自定义函数进行操作。这可以通过apply()函数来实现。
df.groupby(by=grouping_columns)[columns_to_show].apply(function)
示例代码如下:
import pandas as pd
# 创建一个DataFrame
data = {'Name': ['Tom', 'Nick', 'John', 'Tom', 'Nick', 'John'],
'Subject': ['Math', 'English', 'Math', 'English', 'Math', 'Math'],
'Score': [85, 90, 92, 78, 80, 95]}
df = pd.DataFrame(data)
# 按照Name分组后计算每个学生的成绩排名
def rank(scores):
return scores.rank(ascending=False)
grouped = df.groupby('Name')['Score'].apply(rank)
print(grouped)
结果输出如下:
0 2.0
1 2.0
2 1.0
3 1.0
4 1.0
5 3.0
dtype: float64
上述示例中,我们定义了一个自定义函数rank(),用于计算每个学生的成绩排名。然后,我们使用apply()函数将该函数应用到分组后的数据中。
4. 小结
本文详细介绍了Pandas中groupby函数的使用方法,并解析了分组后的结果。我们可以通过查看分组后的数据、计算分组后的统计量或应用自定义函数对已分组的数据进行不同的操作。Pandas的groupby函数是数据处理和分析的重要工具,熟练掌握其用法对于数据分组和分析非常有帮助。
极客教程