pandas groupby函数

pandas groupby函数

pandas groupby函数

简介

在数据分析和数据处理过程中,经常需要对数据进行分组操作。Pandas是一个强大的数据分析工具,其提供的groupby函数能够方便地实现对数据的分组操作。本文将详细介绍Pandas的groupby函数的用法和示例。

一、基本用法

groupby函数是Pandas中一个非常重要的函数,它的基本用法是将数据按照指定的列进行分组,并对分组后的数据进行聚合操作。下面是groupby函数的基本语法:

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

下面对参数进行一一解释:

  • by:用于分组的依据列或列的列表。
  • axis:默认为0,表示按行进行分组;若为1,则表示按列进行分组。
  • level:用于多层索引的数据框的情况,表示用来分组的索引层级。
  • as_index:默认为True,表示分组后的索引是否是分组的依据列,若为False,则不使用分组的依据列作为索引。
  • sort:默认为True,表示按照分组列排序,若为False,则不进行排序。
  • group_keys:默认为True,表示是否在最后的结果中包含分组的键。
  • squeeze:默认为False,表示如果分组的结果中只有一列,则返回Series而不是DataFrame。
  • observed:默认为False,表示当出现任何一个观测值缺失时是否观测到。

二、分组操作

1. 分组依据为某一列

首先,我们来看一个示例。假设我们有一个学生的成绩单,包含学生的姓名、班级和成绩等信息,我们想要按照班级对学生进行分组,并计算每个班级的平均成绩。

import pandas as pd

# 创建DataFrame
data = {
    '姓名': ['张三', '李四', '王五', '赵六', '刘七', '张八', '李九', '王十'],
    '班级': ['一班', '一班', '二班', '三班', '二班', '一班', '三班', '二班'],
    '成绩': [90, 80, 85, 95, 70, 88, 92, 76]
}
df = pd.DataFrame(data)

# 按班级进行分组,并计算平均成绩
grouped = df.groupby('班级')
result = grouped.mean()
print(result)

输出为:

      成绩
班级      
一班  86.0
三班  93.5
二班  77.7

上述代码中,首先创建了一个包含学生成绩的DataFrame。然后,使用groupby函数按照班级进行分组,并使用mean函数计算每个班级的平均成绩。

2. 分组依据为多个列

若要按照多个列进行分组,可以将多个列名作为by参数的值传入。下面的示例演示了如何按照班级和性别两列进行分组,并计算每个班级和性别组合的平均成绩。

import pandas as pd

# 创建DataFrame
data = {
    '姓名': ['张三', '李四', '王五', '赵六', '刘七', '张八', '李九', '王十'],
    '班级': ['一班', '一班', '二班', '三班', '二班', '一班', '三班', '二班'],
    '性别': ['男', '男', '女', '男', '女', '男', '女', '女'],
    '成绩': [90, 80, 85, 95, 70, 88, 92, 76]
}
df = pd.DataFrame(data)

# 按班级和性别进行分组,并计算平均成绩
grouped = df.groupby(['班级', '性别'])
result = grouped.mean()
print(result)

输出为:

        成绩
班级 性别     
一班 男   89.0
    女   88.0
三班 男   95.0
    女   92.0
二班 女   80.5
    男   76.0

上述代码中,首先创建了一个包含学生成绩的DataFrame。然后,使用groupby函数按照班级和性别两列进行分组,并使用mean函数计算每个班级和性别组合的平均成绩。

3. 分组后的聚合操作

在分组后,可以对分组后的数据进行各种聚合操作,如计算平均值、求和、计数等等。常用的聚合函数有meansumcountmaxmin等。下面是一个示例,演示了如何按照班级进行分组,并计算每个班级的总成绩、最高成绩和最低成绩。

import pandas as pd

# 创建DataFrame
data = {
    '姓名': ['张三', '李四', '王五', '赵六', '刘七', '张八', '李九', '王十'],
    '班级': ['一班', '一班', '二班', '三班', '二班', '一班', '三班', '二班'],
    '成绩': [90, 80, 85, 95, 70, 88, 92, 76]
}
df = pd.DataFrame(data)

# 按班级进行分组,并计算总成绩、最高成绩和最低成绩
grouped = df.groupby('班级')
result = grouped.agg({'成绩': ['sum', 'max', 'min']})
print(result)

输出为:

     成绩        
    sum max min
班级            
一班  258  90  80
三班  187  95  92
二班  231  85  76

上述代码中,首先创建了一个包含学生成绩的DataFrame。然后,使用groupby函数按照班级进行分组,并使用agg函数对分组后的数据进行聚合操作,计算总成绩、最高成绩和最低成绩。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程