📜  如何打印 groupby 对象 - Python (1)

📅  最后修改于: 2023-12-03 14:53:05.968000             🧑  作者: Mango

如何打印 groupby 对象 - Python

在 Pandas 中,groupby 对象是一个强大的工具,允许我们按照指定的列对数据进行分组并进行聚合操作。groupby 对象本质上是一个字典,其中键为分组的类别,值为具有相同类别的数据行。

在本文中,我们将了解如何打印 groupby 对象以便更好地理解其结构和内容。

首先,让我们创建一个示例 DataFrame,其中包含一些学生的成绩和学科:

import pandas as pd

data = [['Alice', 'Math', 90],
        ['Alice', 'Science', 85],
        ['Bob', 'Math', 80],
        ['Bob', 'Science', 75],
        ['Charlie', 'Math', 95],
        ['Charlie', 'Science', 80]]

df = pd.DataFrame(data, columns=['Name', 'Subject', 'Score'])

现在,我们可以根据姓名对 DataFrame 进行分组,并计算每个学生的平均成绩:

grouped = df.groupby('Name')
average_scores = grouped.mean()

print(average_scores)

输出为:

         Score
Name          
Alice     87.5
Bob       77.5
Charlie   87.5

此时,我们得到了一个 groupby 对象,其中包含按姓名分组后的数据。为了打印 groupby 对象并查看其内容,我们可以使用 .groups 属性:

print(grouped.groups)

输出为:

{'Alice': [0, 1], 'Bob': [2, 3], 'Charlie': [4, 5]}

这个输出告诉我们每个姓名分组包含哪些原始数据行。更具体地说,Alice 组包含第 0 和第 1 行,Bob 组包含第 2 和第 3 行,Charlie 组包含第 4 和第 5 行。

我们还可以使用 .get_group() 方法访问单个分组。例如,要访问 Alice 组的数据,可以执行以下操作:

alice_group = grouped.get_group('Alice')
print(alice_group)

输出为:

    Name  Subject  Score
0  Alice     Math     90
1  Alice  Science     85

这个输出告诉我们 Alice 组包含两行原始数据,其中一行包含数学成绩,另一行包含科学成绩。

在 Pandas 中,我们还可以使用 .apply() 方法对每个分组执行自定义函数。例如,以下示例定义了一个函数 passing_rate(),该函数返回每个学生及其及格率:

def passing_rate(df):
    name = df['Name'].iloc[0]
    subject_count = len(df)
    pass_count = len(df[df['Score'] >= 60])
    rate = pass_count / subject_count
    return pd.Series({'Name': name, 'Passing Rate': rate})

passing_rates = grouped.apply(passing_rate)
print(passing_rates)

输出为:

         Name  Passing Rate
Name                       
Alice   Alice           1.0
Bob       Bob           0.5
Charlie   Charlie       1.0

这个输出告诉我们每个学生及其及格率。

在本文中,我们介绍了如何打印 groupby 对象以理解其结构和内容。通过使用 .groups 属性和 .get_group() 方法,我们可以查看分组对象的内部组织和单个分组的行。此外,我们还了解了如何使用 .apply() 方法执行自定义操作并创建新的 DataFrame。