Реальный Python
3.85K subscribers
825 photos
10 videos
7 files
874 links
Все о пайтон, новости, подборки на русском и английском. По всем вопросам @evgenycarter
Download Telegram
📊 Группировка данных в 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