pandas groupby多个字段

pandas groupby多个字段

pandas groupby多个字段

在数据分析中,经常需要根据多个字段对数据进行分组并进行聚合操作。pandas库提供了groupby函数来实现这一功能。本文将详细介绍如何使用pandas中的groupby函数对数据按照多个字段进行分组,并进行统计、计算等操作。

数据准备

首先,我们先准备一份包含姓名、性别、年龄和分数的数据集,供后续操作使用。

import pandas as pd

data = {'Name': ['Alice', 'Bob', 'Alice', 'Bob', 'Alice', 'Bob', 'Alice', 'Bob'],
        'Gender': ['Female', 'Male', 'Female', 'Male', 'Female', 'Male', 'Female', 'Male'],
        'Age': [25, 30, 25, 30, 25, 30, 25, 30],
        'Score': [80, 90, 85, 88, 82, 91, 87, 89]}

df = pd.DataFrame(data)
df

运行以上代码,我们得到如下数据集:

    Name  Gender  Age  Score
0  Alice  Female   25     80
1    Bob    Male   30     90
2  Alice  Female   25     85
3    Bob    Male   30     88
4  Alice  Female   25     82
5    Bob    Male   30     91
6  Alice  Female   25     87
7    Bob    Male   30     89

单字段分组

首先,我们来看如何对数据集进行单字段分组。假设我们要按照姓名来计算每个人的平均分数,可以使用如下代码:

# 按照姓名分组,计算平均分数
grouped = df.groupby('Name')['Score'].mean()
grouped

运行以上代码,我们得到以下结果:

Name
Alice    83.50
Bob      89.50
Name: Score, dtype: float64

多字段分组

接下来,我们将介绍如何对数据集按照多个字段进行分组。假设我们要按照姓名和性别计算每组的平均年龄,可以使用如下代码:

# 按照姓名和性别分组,计算平均年龄
grouped = df.groupby(['Name', 'Gender'])['Age'].mean()
grouped

运行以上代码,我们得到以下结果:

Name   Gender
Alice  Female    25
Bob    Male      30
Name: Age, dtype: int64

多字段分组并应用多个聚合函数

除了计算单个聚合函数外,我们还可以同时计算多个聚合函数。假设我们要按照姓名和性别计算每组的平均分数和最高分数,可以使用如下代码:

# 按照姓名和性别分组,计算平均分数和最高分数
grouped = df.groupby(['Name', 'Gender'])['Score'].agg(['mean', 'max'])
grouped

运行以上代码,我们得到以下结果:

                mean  max
Name  Gender
Alice Female    83.50   87
Bob   Male      89.50   91

多字段分组并应用自定义聚合函数

在实际应用中,我们可能需要自定义聚合函数来满足特定的需求。假设我们要按照姓名和性别计算每组的平均分数,并计算平均分数的平方和,可以使用如下代码:

# 自定义聚合函数
def custom_agg_func(x):
    return (x**2).sum()

# 按照姓名和性别分组,计算平均分数并应用自定义聚合函数
grouped = df.groupby(['Name', 'Gender'])['Score'].agg(['mean', custom_agg_func])
grouped

运行以上代码,我们得到以下结果:

                mean  custom_agg_func
Name  Gender
Alice Female    83.50            26274
Bob   Male      89.50            32014

多字段分组并对结果重命名

有时候,我们在进行多字段分组后,希望对最终的结果进行重命名。假设我们要按照姓名和性别计算每组的平均年龄,并将结果重命名为avg_age,可以使用如下代码:

# 按照姓名和性别分组,计算平均年龄并重命名
grouped = df.groupby(['Name', 'Gender'])['Age'].mean().reset_index()
grouped.rename(columns={'Age': 'avg_age'}, inplace=True)
grouped

运行以上代码,我们得到以下结果:

    Name  Gender  avg_age
0  Alice  Female       25
1    Bob    Male         30

通过以上示例,我们学习了如何使用pandas库中的groupby函数对数据按照多个字段进行分组,并进行各种操作。在实陃应用中,可以根据具体需求选择适合的聚合函数和操作,对数据进行更加全面的分析和处理。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程