ZetCode

Pandas 数据分组

最后修改时间:2025年3月1日

Pandas 是一个强大的 Python 数据处理库。在分析数据集时,分组数据是一项常见任务。本教程将通过实际示例介绍如何使用 Pandas 进行数据分组和聚合。

分组允许您根据条件将数据拆分成组,对每个组应用函数,然后合并结果。Pandas 为此提供了 `groupby` 函数。

基本分组

此示例展示了如何按单个列对数据进行分组。

groupby_basic.py
import pandas as pd

data = {
    'Category': ['A', 'B', 'A', 'B', 'A'],
    'Values': [10, 20, 30, 40, 50]
}

df = pd.DataFrame(data)
grouped = df.groupby('Category').sum()

print(grouped)

groupby('Category').sum() 会按“Category”列对数据进行分组,并计算每个组中“Values”的总和。这对于聚合数据很有用。

按多列分组

此示例演示了按多列进行分组。

groupby_multiple.py
import pandas as pd

data = {
    'Category': ['A', 'B', 'A', 'B', 'A'],
    'Subcategory': ['X', 'X', 'Y', 'Y', 'X'],
    'Values': [10, 20, 30, 40, 50]
}

df = pd.DataFrame(data)
grouped = df.groupby(['Category', 'Subcategory']).sum()

print(grouped)

groupby(['Category', 'Subcategory']).sum() 会按“Category”和“Subcategory”两列对数据进行分组。这对于层次分组很有用。

应用多重聚合

此示例展示了如何对分组数据应用多个聚合函数。

groupby_multiple_agg.py
import pandas as pd

data = {
    'Category': ['A', 'B', 'A', 'B', 'A'],
    'Values': [10, 20, 30, 40, 50]
}

df = pd.DataFrame(data)
grouped = df.groupby('Category').agg(['sum', 'mean', 'count'])

print(grouped)

agg(['sum', 'mean', 'count']) 将多个聚合函数应用于分组数据。这对于全面的分析很有用。

分组和过滤

此示例演示了如何根据聚合结果过滤组。

groupby_filter.py
import pandas as pd

data = {
    'Category': ['A', 'B', 'A', 'B', 'A'],
    'Values': [10, 20, 30, 40, 50]
}

df = pd.DataFrame(data)
grouped = df.groupby('Category').filter(lambda x: x['Values'].sum() > 50)

print(grouped)

filter(lambda x: x['Values'].sum() > 50) 会过滤掉“Values”总和大于 50 的组。这对于条件分组很有用。

分组和转换

此示例展示了如何转换分组数据。

groupby_transform.py
import pandas as pd

data = {
    'Category': ['A', 'B', 'A', 'B', 'A'],
    'Values': [10, 20, 30, 40, 50]
}

df = pd.DataFrame(data)
df['Normalized'] = df.groupby('Category')['Values'].transform(lambda x: (x - x.mean()) / x.std())

print(df)

transform(lambda x: (x - x.mean()) / x.std()) 会在每个组内对“Values”列进行标准化。这对于数据标准化很有用。

分组和计数

此示例演示了如何对分组数据进行计数。

groupby_count.py
import pandas as pd

data = {
    'Category': ['A', 'B', 'A', 'B', 'A'],
    'Values': [10, 20, 30, 40, 50]
}

df = pd.DataFrame(data)
grouped = df.groupby('Category').size()

print(grouped)

size 方法会计算每个组中的行数。这对于频率分析很有用。

分组和自定义聚合

此示例展示了如何对分组数据应用自定义聚合函数。

groupby_custom_agg.py
import pandas as pd

data = {
    'Category': ['A', 'B', 'A', 'B', 'A'],
    'Values': [10, 20, 30, 40, 50]
}

df = pd.DataFrame(data)

def custom_agg(x):
    return x.max() - x.min()

grouped = df.groupby('Category').agg(custom_agg)

print(grouped)

agg(custom_agg) 将自定义聚合函数应用于分组数据。这对于专门的计算很有用。

数据分组最佳实践

来源

Pandas groupby 文档

在本文中,我们探讨了如何在 Pandas 中对数据进行分组和聚合。

作者

我叫 Jan Bodnar,是一名充满热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。至今,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有超过十年的经验。

列出 所有 Python 教程