Spec-Zone.ru › Polars

Агрегатные функции

Функция

Описание

AVG

Возвращает среднее арифметическое всех элементов группы.

CORR

Возвращает коэффициент корреляции Пирсона между двумя столбцами.

COUNT

Возвращает количество элементов в группе.

COVAR

Возвращает ковариацию между двумя столбцами.

FIRST

Возвращает первый элемент группы.

LAST

Возвращает последний элемент группы.

MAX

Возвращает наибольший (максимальный) из всех элементов группы.

MEDIAN

Возвращает медианный элемент группы.

MIN

Возвращает наименьший (минимальный) из всех элементов группы.

QUANTILE_CONT

Возвращает элемент непрерывного квантиля из группы (интерполированное значение между двумя ближайшими значениями).

QUANTILE_DISC

Разбивает интервал [0, 1] на подинтервалы равной длины, каждый из которых соответствует значению, и возвращает значение, связанное с подинтервалом, в который попадает значение квантиля.

STDDEV

Возвращает стандартное отклонение всех элементов группы.

STRING_AGG

Объединяет входные строковые значения в одну строку, разделяя их разделителем.

SUM

Возвращает сумму всех элементов группы.

TOTAL

Возвращает сумму всех элементов группы; если нет ненулевых значений, возвращает ноль, а не null.

VARIANCE

Возвращает дисперсию всех элементов группы.

Фильтрация агрегатных функций

Вызов любой агрегатной функции можно дополнить предложением FILTER (WHERE …), которое ограничивает его строками, для которых предикат имеет значение true. Это предложение относится к отдельному вызову агрегатной функции и не зависит от предложения WHERE запроса, поэтому разные агрегатные функции в одном и том же SELECT могут обрабатывать разные наборы строк.

Примечание

FILTER нельзя использовать вместе с OVER в одном вызове агрегатной функции.

Пример:

df = pl.DataFrame(
    {
        "category": ["A", "B", "A", "B", "A", "B"],
        "value":    [10, 20, 30, 40, 50, 60],
    }
)
df.sql("""
  SELECT
    category,
    SUM(value) AS total,
    SUM(value) FILTER (WHERE value > 25) AS total_high,
    SUM(value) FILTER (WHERE value <= 25) AS total_low,
    COUNT(*) FILTER (WHERE value >= 40) AS n_top
  FROM self
  GROUP BY category
  ORDER BY category
""")
# shape: (2, 5)
# ┌──────────┬───────┬────────────┬───────────┬───────┐
# │ category ┆ total ┆ total_high ┆ total_low ┆ n_top │
# │ ---      ┆ ---   ┆ ---        ┆ ---       ┆ ---   │
# │ str      ┆ i64   ┆ i64        ┆ i64       ┆ u32   │
# ╞══════════╪═══════╪════════════╪═══════════╪═══════╡
# │ A        ┆ 90    ┆ 80         ┆ 10        ┆ 1     │
# │ B        ┆ 120   ┆ 100        ┆ 20        ┆ 2     │
# └──────────┴───────┴────────────┴───────────┴───────┘

AVG

Возвращает среднее арифметическое всех элементов группы.

Пример:

df = pl.DataFrame({"bar": [20, 10, 30, 40]})
df.sql("""
  SELECT AVG(bar) AS bar_avg FROM self
""")
# shape: (1, 1)
# ┌─────────┐
# │ bar_avg │
# │ ---     │
# │ f64     │
# ╞═════════╡
# │ 25.0    │
# └─────────┘

CORR

Возвращает коэффициент корреляции Пирсона между двумя столбцами.

Пример:

df = pl.DataFrame({"foo": [1, 2, 3, 4, 5], "bar": [2, 4, 7, 5, 9]})
df.sql("""
  SELECT CORR(foo, bar) AS corr FROM self
""")
# shape: (1, 1)
# ┌──────────┐
# │ corr     │
# │ ---      │
# │ f64      │
# ╞══════════╡
# │ 0.877809 │
# └──────────┘

COUNT

Возвращает количество элементов в группе.

Пример:

df = pl.DataFrame(
  {
    "foo": ["b", "a", "b", "c"],
    "bar": [20, 10, 30, 40]
  }
)
df.sql("""
  SELECT
    COUNT(bar) AS n_bar,
    COUNT(DISTINCT foo) AS n_foo_unique
  FROM self
""")

# shape: (1, 2)
# ┌───────┬──────────────┐
# │ n_bar ┆ n_foo_unique │
# │ ---   ┆ ---          │
# │ u32   ┆ u32          │
# ╞═══════╪══════════════╡
# │ 4     ┆ 3            │
# └───────┴──────────────┘

COVAR

Возвращает ковариацию между двумя столбцами.

Псевдонимы

COVAR_SAMP

Пример:

df = pl.DataFrame({"foo": [1, 2, 3, 4, 5], "bar": [2, 4, 7, 5, 9]})
df.sql("""
  SELECT COVAR(foo, bar) AS covar FROM self
""")

# shape: (1, 1)
# ┌───────┐
# │ covar │
# │ ---   │
# │ f64   │
# ╞═══════╡
# │ 3.75  │
# └───────┘

FIRST

Возвращает первый элемент группы.

Пример:

df = pl.DataFrame({"foo": ["b", "a", "b", "c"]})
df.sql("""
  SELECT FIRST(foo) AS ff FROM self
""")
# shape: (1, 1)
# ┌─────┐
# │ ff  │
# │ --- │
# │ str │
# ╞═════╡
# │ b   │
# └─────┘

LAST

Возвращает последний элемент группы.

Пример:

df = pl.DataFrame({"foo": ["b", "a", "b", "c"]})
df.sql("""
  SELECT LAST(foo) AS lf FROM self
""")
# shape: (1, 1)
# ┌─────┐
# │ lf  │
# │ --- │
# │ str │
# ╞═════╡
# │ c   │
# └─────┘

MAX

Возвращает наибольший (максимальный) из всех элементов группы.

Пример:

df = pl.DataFrame({"bar": [20, 10, 30, 40]})
df.sql("""
  SELECT MAX(bar) AS bar_max FROM self
""")
# shape: (1, 1)
# ┌─────────┐
# │ bar_max │
# │ ---     │
# │ i64     │
# ╞═════════╡
# │ 40      │
# └─────────┘

MEDIAN

Возвращает медианный элемент группы.

Пример:

df = pl.DataFrame({"bar": [20, 10, 30, 40]})
df.sql("""
  SELECT MEDIAN(bar) AS bar_median FROM self
""")
# shape: (1, 1)
# ┌────────────┐
# │ bar_median │
# │ ---        │
# │ f64        │
# ╞════════════╡
# │ 25.0       │
# └────────────┘

MIN

Возвращает наименьший (минимальный) из всех элементов группы.

Пример:

df = pl.DataFrame({"bar": [20, 10, 30, 40]})
df.sql("""
  SELECT MIN(bar) AS bar_min FROM self
""")
# shape: (1, 1)
# ┌─────────┐
# │ bar_min │
# │ ---     │
# │ i64     │
# ╞═════════╡
# │ 10      │
# └─────────┘

QUANTILE_CONT

Возвращает элемент непрерывного квантиля из группы (интерполированное значение между двумя ближайшими значениями).

Пример:

df = pl.DataFrame({"foo": [5, 20, 10, 30, 70, 40, 10, 90]})
df.sql("""
  SELECT
    QUANTILE_CONT(foo, 0.25) AS foo_q25,
    QUANTILE_CONT(foo, 0.50) AS foo_q50,
    QUANTILE_CONT(foo, 0.75) AS foo_q75,
  FROM self
""")
# shape: (1, 3)
# ┌─────────┬─────────┬─────────┐
# │ foo_q25 ┆ foo_q50 ┆ foo_q75 │
# │ ---     ┆ ---     ┆ ---     │
# │ f64     ┆ f64     ┆ f64     │
# ╞═════════╪═════════╪═════════╡
# │ 10.0    ┆ 25.0    ┆ 47.5    │
# └─────────┴─────────┴─────────┘

QUANTILE_DISC

Разбивает интервал [0, 1] на подинтервалы равной длины, каждый из которых соответствует значению, и возвращает значение, связанное с подинтервалом, в который попадает значение квантиля.

Пример:

df = pl.DataFrame({"foo": [5, 20, 10, 30, 70, 40, 10, 90]})
df.sql("""
  SELECT
    QUANTILE_DISC(foo, 0.25) AS foo_q25,
    QUANTILE_DISC(foo, 0.50) AS foo_q50,
    QUANTILE_DISC(foo, 0.75) AS foo_q75,
  FROM self
""")
# shape: (1, 3)
# ┌─────────┬─────────┬─────────┐
# │ foo_q25 ┆ foo_q50 ┆ foo_q75 │
# │ ---     ┆ ---     ┆ ---     │
# │ f64     ┆ f64     ┆ f64     │
# ╞═════════╪═════════╪═════════╡
# │ 10.0    ┆ 20.0    ┆ 40.0    │
# └─────────┴─────────┴─────────┘

STDDEV

Возвращает выборочное стандартное отклонение всех элементов группы.

Псевдонимы

STDEV, STDEV_SAMP, STDDEV_SAMP

Пример:

df = pl.DataFrame(
    {
        "foo": [10, 20, 8],
        "bar": [10, 7, 18],
    }
)
df.sql("""
  SELECT STDDEV(foo) AS foo_std, STDDEV(bar) AS bar_std FROM self
""")
# shape: (1, 2)
# ┌──────────┬──────────┐
# │ foo_std  ┆ bar_std  │
# │ ---      ┆ ---      │
# │ f64      ┆ f64      │
# ╞══════════╪══════════╡
# │ 6.429101 ┆ 5.686241 │
# └──────────┴──────────┘

STRING_AGG

Объединяет входные строковые значения в одну строку, разделяя их указанным разделителем. Поддерживает DISTINCT и предложения ORDER BY и LIMIT внутри аргумента, которые позволяют задать, какие значения объединяются и в каком порядке; разделитель необязателен, по умолчанию используется ",".

Псевдонимы

GROUP_CONCAT, LISTAGG

Пример:

df = pl.DataFrame(
    {
        "category": ["A", "B", "A", "B", "A", "B"],
        "label": ["x1", "y1", "x2", "y2", "x3", "y3"],
        "value": [10, 20, 30, 40, 50, 60],
    }
)
df.sql("""
  SELECT
    category,
    STRING_AGG(label LIMIT 2) AS two_labels,
    STRING_AGG(label, ':' ORDER BY value DESC) AS labels_desc,
    STRING_AGG(label, ',' ORDER BY value ASC) FILTER(WHERE label !~ '1$') AS labels_omit_1,
  FROM self
  GROUP BY category
  ORDER BY category
""")
# shape: (2, 4)
# ┌──────────┬────────────┬─────────────┬───────────────┐
# │ category ┆ two_labels ┆ labels_desc ┆ labels_omit_1 │
# │ ---      ┆ ---        ┆ ---         ┆ ---           │
# │ str      ┆ str        ┆ str         ┆ str           │
# ╞══════════╪════════════╪═════════════╪═══════════════╡
# │ A        ┆ x1,x2      ┆ x3:x2:x1    ┆ x2,x3         │
# │ B        ┆ y1,y2      ┆ y3:y2:y1    ┆ y2,y3         │
# └──────────┴────────────┴─────────────┴───────────────┘

SUM

Возвращает сумму всех элементов группы.

Пример:

df = pl.DataFrame(
    {
        "foo": [1, 2, 3],
        "bar": [6, 7, 8],
        "ham": ["a", "b", "c"],
    }
)
df.sql("""
  SELECT SUM(foo) AS foo_sum, SUM(bar) AS bar_sum FROM self
""")
# shape: (1, 2)
# ┌─────────┬─────────┐
# │ foo_sum ┆ bar_sum │
# │ ---     ┆ ---     │
# │ i64     ┆ i64     │
# ╞═════════╪═════════╡
# │ 6       ┆ 21      │
# └─────────┴─────────┘

TOTAL

Возвращает сумму всех элементов группы. В отличие от SUM (которая, согласно стандарту SQL, возвращает null для входных данных, состоящих только из null), TOTAL возвращает ноль. Тип данных результата соответствует типу данных суммируемого столбца.

Пример:

df = pl.DataFrame(
    {"foo": [1, 2, 3], "bar": [None, None, None]},
    schema={"foo": pl.Int64, "bar": pl.Int64},
)
df.sql("""
  SELECT
    SUM(bar) AS bar_sum,
    TOTAL(foo) AS foo_total,
    TOTAL(bar) AS bar_total
  FROM self
""")
# shape: (1, 3)
# ┌─────────┬───────────┬───────────┐
# │ bar_sum ┆ foo_total ┆ bar_total │
# │ ---     ┆ ---       ┆ ---       │
# │ i64     ┆ i64       ┆ i64       │
# ╞═════════╪═══════════╪═══════════╡
# │ null    ┆ 6         ┆ 0         │
# └─────────┴───────────┴───────────┘

VARIANCE

Возвращает дисперсию всех элементов группы.

Псевдонимы

VAR, VAR_SAMP

Пример:

df = pl.DataFrame(
    {
        "foo": [10, 20, 8],
        "bar": [10, 7, 18],
    }
)
df.sql("""
  SELECT VARIANCE(foo) AS foo_var, VARIANCE(bar) AS bar_var FROM self
""")
# shape: (1, 2)
# ┌───────────┬───────────┐
# │ foo_var   ┆ bar_var   │
# │ ---       ┆ ---       │
# │ f64       ┆ f64       │
# ╞═══════════╪═══════════╡
# │ 41.333333 ┆ 32.333333 │
# └───────────┴───────────┘

© 2020 Ritchie Vink
© 2022 Polars contributors
Licensed under the MIT License.
https://docs.pola.rs/api/python/stable/reference/sql/functions/aggregate.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API