TGViewer
Реальный Python Реальный Python @python_real · 3.64K subscribers
Post #992 979
📊 Группировка данных в Polars с помощью `groupby`

Polars — это высокопроизводительная библиотека для анализа данных на Python. Она особенно хороша при работе с большими объемами данных, благодаря своей колонко-ориентированной архитектуре и использованию Rust под капотом.

Одним из ключевых инструментов для агрегации и анализа данных является метод .groupby().

Основы .groupby()

Пример базовой группировки:


import polars as pl

df = pl.DataFrame({
"city": ["London", "London", "Oslo", "Oslo", "Berlin", "Berlin"],
"year": [2020, 2021, 2020, 2021, 2020, 2021],
"value": [100, 150, 200, 220, 50, 80],
})

result = df.groupby("city").agg([
pl.col("value").mean().alias("average_value")
])
print(result)


Группировка по нескольким колонкам

Можно сгруппировать по нескольким признакам:


df.groupby(["city", "year"]).agg([
pl.col("value").sum().alias("total_value")
])


Использование выражений

Polars поддерживает ленивое выполнение (lazy evaluation) и мощную систему выражений:


df.groupby("city").agg([
(pl.col("value") * 2).mean().alias("double_avg")
])


Методы .groupby() в ленивом API

Для работы с большими данными предпочтительно использовать ленивый режим:


df_lazy = df.lazy()
result = df_lazy.groupby("city").agg([
pl.col("value").sum().alias("total")
])


Для запуска вычислений используется .collect():


result.collect()


Применение .groupby_dynamic() и .groupby_rolling()

Эти методы полезны при работе с временными рядами:

* groupby_dynamic: для агрегирования по фиксированным временным интервалам (например, по дням, неделям).
* groupby_rolling: для скользящего окна (например, скользящее среднее за 7 дней).

Пример:


df = pl.DataFrame({
"timestamp": pl.date_range(low=datetime(2022,1,1), high=datetime(2022,1,10), interval="1d"),
"value": range(10)
})

df.groupby_rolling(index_column="timestamp", period="3d").agg([
pl.col("value").mean().alias("rolling_avg")
])


https://realpython.com/polars-groupby/

#python

👉 @python_real
  • 👍 3
More from @python_real
  1. Sep 22, 2026🔴 Тестовый собес на Middle Python с разработчиком из Яндекса завтра вечером! [+ разбор 50…
  2. Sep 22, 2026📊 Статистика в Python: с чего начать анализ данных Среднее значение может скрыть важную д…
  3. Sep 21, 2026🐍 В Python 3.15 появится frozendict - словарь, который нельзя изменить Это встроенный тип…
  4. Sep 1, 2026🔍Тестовое собеседование на Middle Python с разработчиком из Авито завтра вечером Уже завт…
  5. Sep 1, 2026🐍 Асинхронное программирование в Python: от генераторов до asyncio Почему обычная програм…
  6. Aug 24, 2026🐍 Как использовать Claude Code для разработки и отладки проектов на Python Real Python оп…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →