pandas分组聚合

pandas分组聚合

pandas分组聚合

一、引言

在数据分析和处理过程中,常常需要对数据进行分组聚合。pandas是一种强大的数据处理工具,提供了灵活且高效的方式来对数据进行分组操作。本文将介绍pandas中的分组聚合功能,包括分组基准、分组操作和常见的聚合函数。

二、分组基准

在进行分组聚合之前,首先需要确定分组的基准。pandas提供了多种基准进行分组,常见的有以下几种:

按列进行分组

可以根据一列或多列的值进行分组。例如,对于一个包含”姓名”和”年龄”的数据集,可以按照”年龄”进行分组,统计每个年龄段的人数。

按索引进行分组

可以根据索引进行分组。索引是数据集中每个元素的唯一标识,可以是整数、字符串或其他对象。例如,对于一个包含日期数据的数据集,可以按照月份进行分组,统计每个月的数据。

按函数进行分组

可以定义一个函数,根据函数的返回值进行分组。例如,对于一个包含”身高”的数据集,可以定义一个函数,根据身高的范围进行分组,统计每个身高段的人数。

按层次进行分组

可以根据多个级别的索引进行分组。层次索引是多级的索引,可以根据每个级别的标签进行分组。例如,对于一个包含地区、年份和销售额的数据集,可以按照地区和年份进行分组,统计每个地区每年的销售额。

三、分组操作

pandas提供了灵活且简洁的方式来进行分组操作。下面是一些常见的分组操作:

按列进行分组

可以使用groupby函数对数据进行按列分组。该函数接受一个或多个列名作为参数,并返回一个DataFrameGroupBy对象。可以通过该对象进行进一步的操作,例如聚合、筛选和排序等。

示例代码如下:

import pandas as pd

# 创建一个包含姓名和年龄的数据集
data = {'姓名': ['张三', '李四', '王五', '赵六', '钱七'],
        '年龄': [25, 30, 28, 26, 32]}
df = pd.DataFrame(data)

# 按年龄进行分组
grouped = df.groupby('年龄')

按索引进行分组

可以使用groupby函数对数据进行按索引分组。该函数接受一个索引数组作为参数,并返回一个DataFrameGroupBy对象。可以通过该对象进行进一步的操作,例如聚合、筛选和排序等。

示例代码如下:

import pandas as pd

# 创建一个包含日期数据的数据集
data = {'销售额': [1000, 2000, 1500, 3000],
        '日期': pd.date_range(start='2022-01-01', periods=4, freq='M')}
df = pd.DataFrame(data)
df.set_index('日期', inplace=True)

# 按月份进行分组
grouped = df.groupby(df.index.month)

按函数进行分组

可以使用groupby函数对数据进行按函数分组。该函数接受一个函数作为参数,并返回一个DataFrameGroupBy对象。可以通过该对象进行进一步的操作,例如聚合、筛选和排序等。

示例代码如下:

import pandas as pd

# 创建一个包含身高的数据集
data = {'姓名': ['张三', '李四', '王五', '赵六', '钱七'],
        '身高': [170, 165, 180, 175, 185]}
df = pd.DataFrame(data)

# 定义一个根据身高范围进行分组的函数
def height_group(height):
    if height < 170:
        return '矮'
    elif height >= 170 and height < 180:
        return '中等'
    else:
        return '高'

# 按身高进行分组
grouped = df.groupby(height_group)

按层次进行分组

可以使用groupby函数对数据进行按层次分组。该函数接受一个多级索引数组作为参数,并返回一个DataFrameGroupBy对象。可以通过该对象进行进一步的操作,例如聚合、筛选和排序等。

示例代码如下:

import pandas as pd

# 创建一个包含地区、年份和销售额的数据集
data = {'销售额': [1000, 2000, 1500, 3000],
        '地区': ['北京', '上海', '北京', '上海'],
        '年份': [2020, 2020, 2021, 2021]}
df = pd.DataFrame(data)
df.set_index(['地区', '年份'], inplace=True)

# 按地区和年份进行分组
grouped = df.groupby(level=['地区', '年份'])

分组操作的链式调用

可以在进行分组操作后,链式调用多个方法对数据进行进一步处理。例如,可以在分组操作后使用agg方法对每个分组进行聚合计算,使用filter方法筛选满足条件的分组,使用sort_values方法排序分组等。

示例代码如下:

import pandas as pd

# 创建一个包含姓名和年龄的数据集
data = {'姓名': ['张三', '李四', '王五', '赵六', '钱七'],
        '年龄': [25, 30, 28, 26, 32]}
df = pd.DataFrame(data)

# 按年龄进行分组,并计算每个分组的平均年龄
result = df.groupby('年龄').agg({'年龄': 'count'})

# 筛选年龄大于等于30的分组
result = result.filter(lambda x: x >= 30)

# 按照分组人数降序排序
result = result.sort_values(by='年龄', ascending=False)

四、常见的聚合函数

在进行分组聚合时,常常需要使用一些聚合函数对每个分组进行计算。pandas提供了多种常见的聚合函数,包括:

sum

计算每个分组的总和。

count

计算每个分组的数量。

mean

计算每个分组的平均值。

median

计算每个分组的中位数。

min

计算每个分组的最小值。

max

计算每个分组的最大值。

std

计算每个分组的标准差。

var

计算每个分组的方差。

describe

生成每个分组的基本统计描述,包括计数、均值、标准差、最小值、25%分位数、中位数、75%分位数和最大值。

五、示例代码

下面是一些示例代码,演示了pandas中的分组聚合操作。

import pandas as pd

# 创建一个包含姓名、性别和年龄的数据集
data = {'姓名': ['张三', '李四', '王五', '赵六', '钱七'],
        '性别': ['男', '女', '女', '男', '男'],
        '年龄': [25, 30, 28, 26, 32]}
df = pd.DataFrame(data)

# 按性别进行分组,并计算每个分组的总和、数量、平均值和中位数
result = df.groupby('性别').agg({'年龄': ['sum', 'count', 'mean', 'median']})

# 打印结果
print(result)

运行以上代码,输出如下:

    年龄                   
   sum count       mean median
性别                           
女   58     2  29.000000   29.0
男   83     3  27.666667   26.0

以上代码将数据按照性别进行分组,并计算了每个分组的年龄总和、数量、平均值和中位数。

六、总结

分组聚合是数据分析和处理中常用的操作之一,pandas提供了强大且灵活的分组聚合功能,可以根据不同的基准进行分组,并使用常见的聚合函数进行计算。通过合理使用分组聚合操作,可以快速地对数据进行分析和统计,得到有价值的结果。

在本文中,我们介绍了pandas中的分组基准,包括按列、索引、函数和层次进行分组。我们还介绍了分组操作的方式,包括使用groupby函数对数据进行分组,并链式调用多个方法进行进一步处理。最后,我们列举了常见的聚合函数,并给出了示例代码演示了分组聚合的应用。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程