pandas数据分组和聚合操作方法

下面是关于“pandas数据分组和聚合操作方法”的完整攻略。

1. 前置基础知识

在进行数据分组和聚合操作前,我们需要掌握以下基础知识:

  1. pandas的数据结构Series和DataFrame;
  2. pandas中的GroupBy对象,用于进行数据分组操作;
  3. 聚合操作中的常用函数,包括sum、mean、count等;
  4. apply方法的使用,可以对数据进行自定义操作。

2. 数据分组

pandas中的数据分组可以使用GroupBy对象,GroupBy对象的创建可以通过对DataFrame进行groupby方法调用实现。groupby方法的参数包括要分组的列或多列的名称。

import pandas as pd

data = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
                     'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
                     'C': [1, 2, 3, 4, 5, 6, 7, 8],
                     'D': [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8]})

grouped = data.groupby('A')  # 按照A列进行分组

for key, value in grouped:
    print(key)
    print(value)

以上代码中,创建了一个DataFrame和一个GroupBy对象,按照A列进行分组,将DataFrame按照A列中不同的值划分为foo和bar两个组,for循环遍历每个组的名称和对应的数据。

3. 聚合操作

分组完成后,可以进行聚合操作,pandas支持的聚合操作包括sum、mean、count等,对应着分别对数据求和、求均值和计数等操作。

import pandas as pd

data = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
                     'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
                     'C': [1, 2, 3, 4, 5, 6, 7, 8],
                     'D': [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8]})

grouped = data.groupby('A')  # 按照A列进行分组

result = grouped.sum()  # 对每组的数值列求和

print(result)

以上代码中,通过groupby方法对DataFrame进行分组(按照A列),然后使用sum方法对每组的数值列求和,获得了每个分组的总和。

4. 自定义聚合操作

pandas还支持自定义聚合函数,可以使用apply方法对每个分组进行自定义操作。apply方法接受一个函数作为参数,该函数的输入是每个分组的数据,输出是聚合后的结果。

import pandas as pd

def my_func(data):
    return data['C'].sum() / data['D'].mean()

data = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
                     'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
                     'C': [1, 2, 3, 4, 5, 6, 7, 8],
                     'D': [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8]})

grouped = data.groupby('A')  # 按照A列进行分组

result = grouped.apply(my_func)  # 对每组数据执行自定义操作

print(result)

以上代码中,定义了一个自定义函数my_func,对每个组的数据进行自定义操作。apply方法将这个函数作为参数输入,对每组数据执行自定义操作,并返回操作后的结果。

5. 示例说明

为了更好地理解分组和聚合操作的实现和意义,下面给出两个示例说明。

示例1

我们有一份销售数据的DataFrame,包括日期、销售量、类别等信息。我们希望按照不同类别的销售量总和进行排序。

import pandas as pd

data = pd.DataFrame({'date': ['2022-01-01', '2022-01-02', '2022-01-03', '2022-01-04', '2022-01-05', '2022-01-01', '2022-01-02', '2022-01-03', '2022-01-04', '2022-01-05'],
                     'category': ['fruit', 'vege', 'meat', 'fruit', 'vege', 'meat', 'fruit', 'vege', 'meat', 'fruit'],
                     'sales': [100, 150, 200, 120, 180, 230, 110, 170, 190, 130]})

grouped = data.groupby('category')

result = grouped.sum().sort_values('sales', ascending=False)

print(result)

以上代码中,使用groupby方法将DataFrame按照类别列进行分组,然后对每组数据的销售量列进行求和操作,最后按照销售量降序排列输出结果。

示例2

我们有一组学生成绩数据,包括每个学生的姓名、科目和成绩等信息。我们希望纵向统计每个学生的成绩平均值,并按照平均值进行降序排列。

import pandas as pd

data = pd.DataFrame({'name': ['Tom', 'Jack', 'Tom', 'Tom', 'Jack', 'Lucy', 'Lucy', 'Lucy'],
                     'subject': ['math', 'math', 'math', 'English', 'English', 'math', 'English', 'math'],
                     'score': [80, 90, 70, 85, 92, 88, 82, 91]})

grouped = data.groupby('name')

result = grouped.mean().sort_values('score', ascending=False)

print(result)

以上代码中,使用groupby方法将DataFrame按照姓名列进行分组,然后对每个分组中的成绩列进行平均值操作,最后按照平均值降序排列输出结果。

本文链接:http://task.lmcjl.com/news/17466.html

展开阅读全文