Pandas groupby 应用与具有特定功能的转换

pandas

1个回答

写回答

方楚军

2025-06-22 23:40

+ 关注

Pandas
Pandas

Pandas groupby 应用与具有特定功能的转换

Pandas是一个强大的数据分析工具,它提供了许多功能强大的函数和方法来处理和转换数据。其中之一是groupby函数,它允许我们按照一个或多个列的值对数据进行分组,并对每个组应用特定的功能。本文将介绍如何使用Pandas的groupby函数以及如何应用一些常见的转换功能。

1. 分组数据

在使用groupby函数之前,我们首先需要加载数据集。假设我们有一个包含学生姓名、科目和分数的数据集。我们可以使用Pandas的DataFrame来表示这个数据集,并将其命名为df。

代码示例:

Python

import Pandas as pd

data = {

'姓名': ['张三', '李四', '王五', '赵六', '张三', '李四', '王五', '赵六'],

'科目': ['语文', '数学', '英语', '语文', '数学', '英语', '语文', '数学'],

'分数': [85, 92, 78, 89, 95, 87, 80, 91]

}

df = pd.DataFrame(data)

2. 对分组数据应用函数

现在我们已经有了一个包含学生姓名、科目和分数的数据集。我们可以使用groupby函数按照姓名对数据进行分组,并对每个组应用一些常见的函数,如求平均值、求和、计数等。

代码示例:

Python

# 按照姓名分组,并计算每个学生的平均分数

avg_scores = df.groupby('姓名')['分数'].mean()

# 按照姓名和科目分组,并计算每个学生在每个科目上的总分数

Total_scores = df.groupby(['姓名', '科目'])['分数'].sum()

# 按照姓名分组,并计算每个学生的记录数

record_counts = df.groupby('姓名').size()

3. 对分组数据应用自定义函数

除了使用内置的函数,我们还可以应用自定义的函数来对分组数据进行转换。我们只需定义一个函数,并将其作为参数传递给groupby函数的agg方法即可。

代码示例:

Python

# 定义一个计算分数范围的函数

def score_range(scores):

return max(scores) - min(scores)

# 按照姓名分组,并计算每个学生的分数范围

score_ranges = df.groupby('姓名')['分数'].agg(score_range)

4. 多个转换功能的组合应用

在实际应用中,我们可能需要对分组数据应用多个转换功能。Pandas提供了灵活的方法来实现这一点,我们只需按照需要依次应用不同的函数即可。

代码示例:

Python

# 按照姓名分组,并计算每个学生的平均分数、最高分数和最低分数

summary = df.groupby('姓名')['分数'].agg(['mean', 'max', 'min'])

# 按照姓名和科目分组,并计算每个学生在每个科目上的平均分数和总分数

summary = df.groupby(['姓名', '科目'])['分数'].agg(['mean', 'sum'])

在本文中,我们介绍了如何使用Pandas的groupby函数以及如何应用一些常见的转换功能。通过按照特定的列值对数据进行分组,并对每个组应用函数,我们可以轻松地对数据进行聚合和转换。无论是使用内置的函数还是自定义的函数,Pandas都提供了灵活的方法来满足我们的需求。希望本文对你在使用Pandas进行数据分析和转换时有所帮助。

参考代码:

Python

import Pandas as pd

data = {

'姓名': ['张三', '李四', '王五', '赵六', '张三', '李四', '王五', '赵六'],

'科目': ['语文', '数学', '英语', '语文', '数学', '英语', '语文', '数学'],

'分数': [85, 92, 78, 89, 95, 87, 80, 91]

}

df = pd.DataFrame(data)

# 按照姓名分组,并计算每个学生的平均分数

avg_scores = df.groupby('姓名')['分数'].mean()

# 按照姓名和科目分组,并计算每个学生在每个科目上的总分数

Total_scores = df.groupby(['姓名', '科目'])['分数'].sum()

# 按照姓名分组,并计算每个学生的记录数

record_counts = df.groupby('姓名').size()

# 定义一个计算分数范围的函数

def score_range(scores):

return max(scores) - min(scores)

# 按照姓名分组,并计算每个学生的分数范围

score_ranges = df.groupby('姓名')['分数'].agg(score_range)

# 按照姓名分组,并计算每个学生的平均分数、最高分数和最低分数

summary = df.groupby('姓名')['分数'].agg(['mean', 'max', 'min'])

# 按照姓名和科目分组,并计算每个学生在每个科目上的平均分数和总分数

summary = df.groupby(['姓名', '科目'])['分数'].agg(['mean', 'sum'])

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号