ZetCode

Polars GroupBy 函数

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

Polars 是一个为 Python 设计的快速、高效的 DataFrame 库。`groupby` 函数用于基于一个或多个列对数据进行分组。本教程将通过实际示例介绍如何在 Polars 中使用 `groupby` 函数。

数据分组对于汇总、聚合和分析数据集至关重要。Polars 为这些任务提供了强大的 `groupby` 方法。

基本 GroupBy:计数

此示例展示了如何对数据进行分组并计算每个组的行数。

groupby_count.py
import polars as pl

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

df = pl.DataFrame(data)
result = df.groupby('Category').count()

print(result)

groupby('Category').count() 按“Category”对数据进行分组,并计算每个组的行数。这对于汇总数据非常有用。

GroupBy:求和

此示例演示了如何对数据进行分组并计算某一列的总和。

groupby_sum.py
import polars as pl

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

df = pl.DataFrame(data)
result = df.groupby('Category').sum()

print(result)

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

GroupBy:平均值

此示例展示了如何对数据进行分组并计算某一列的平均值。

groupby_mean.py
import polars as pl

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

df = pl.DataFrame(data)
result = df.groupby('Category').mean()

print(result)

groupby('Category').mean() 按“Category”对数据进行分组,并计算“Values”列的平均值。这对于分析趋势非常有用。

GroupBy:多个聚合

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

groupby_multiple.py
import polars as pl

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

df = pl.DataFrame(data)
result = df.groupby('Category').agg([
    pl.col('Values').sum().alias('Sum'),
    pl.col('Values').mean().alias('Mean')
])

print(result)

groupby('Category').agg() 对“Values”列应用多个聚合函数。这对于详细分析非常有用。

GroupBy:自定义聚合

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

groupby_custom.py
import polars as pl

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

df = pl.DataFrame(data)

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

result = df.groupby('Category').agg([
    pl.col('Values').apply(custom_agg).alias('Range')
])

print(result)

groupby('Category').agg() 应用自定义函数来计算每个组的范围(最大值 - 最小值)。这对于自定义计算非常有用。

GroupBy:多个列

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

groupby_multiple_columns.py
import polars as pl

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

df = pl.DataFrame(data)
result = df.groupby(['Category', 'SubCategory']).sum()

print(result)

groupby(['Category', 'SubCategory']).sum() 按“Category”和“SubCategory”对数据进行分组,并计算“Values”列的总和。这对于多级分析非常有用。

GroupBy:过滤组

此示例展示了如何根据条件过滤组。

groupby_filter.py
import polars as pl

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

df = pl.DataFrame(data)
result = df.groupby('Category').filter(
    pl.col('Values').sum() > 100
)

print(result)

groupby('Category').filter() 过滤“Values”总和大于 100 的组。这对于条件分析非常有用。

GroupBy:排序组

此示例演示了如何根据某一列对组进行排序。

groupby_sort.py
import polars as pl

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

df = pl.DataFrame(data)
result = df.groupby('Category').agg([
    pl.col('Values').sum().alias('Sum')
]).sort('Sum', descending=True)

print(result)

groupby('Category').agg().sort() 按“Values”的总和降序对组进行排序。这对于对组进行排名非常有用。

GroupBy 的最佳实践

来源

Polars 文档

在本文中,我们探讨了如何在 Polars 中使用 `groupby` 函数。

作者

我的名字是 Jan Bodnar,我是一名热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

所有 Polars 教程列表。