Мне нужно вычислить средневзвешенное значение процента после группировки по полярностям. Поскольку мне априори нужна общая сумма в качестве знаменателя среднего значения, я думаю, что необходимо создать специальную функцию, которая будет применяться в методе agg().
Это пример того, что я пробовал (не работает):
import polars as pl
df_group = df.group_by(pl.col("entity"))
.agg(
total_amount=pl.col("amount").sum(),
pct_avg=(
pl.col("pct")
* pl.col("amount")
/ pl.col("total_amount")
).sum(),
)
Вот минимальный пример:
a = pl.DataFrame(
{
"entity": ["x", "x", "y", "y"],
"pct": [0.5, 0.4, 0.4, 0.2],
"amount": [1, 10, 100, 1000],
}
)
┌────────┬─────┬────────┐
│ entity ┆ pct ┆ amount │
│ --- ┆ --- ┆ --- │
│ str ┆ f64 ┆ i64 │
╞════════╪═════╪════════╡
│ x ┆ 0.5 ┆ 1 │
│ x ┆ 0.4 ┆ 10 │
│ y ┆ 0.4 ┆ 100 │
│ y ┆ 0.2 ┆ 1000 │
└────────┴─────┴────────┘
И ожидаемый результат:
a_group = pl.DataFrame(
{
"entity": ["x", "y"],
"total_amount": [11, 1100],
"pct_avg": ["(0.5 * 1 + 0.4 * 10)/11", "(0.4 * 100 + 0.2 *1000)/1100"],
}
)
┌────────┬──────────────┬──────────────────────────────┐
│ entity ┆ total_amount ┆ pct_avg │
│ --- ┆ --- ┆ --- │
│ str ┆ i64 ┆ str │
╞════════╪══════════════╪══════════════════════════════╡
│ x ┆ 11 ┆ (0.5 * 1 + 0.4 * 10)/11 │
│ y ┆ 1100 ┆ (0.4 * 100 + 0.2 *1000)/1100 │
└────────┴──────────────┴──────────────────────────────┘
Подробнее здесь: https://stackoverflow.com/questions/798 ... ith-polars
Настраиваемая агрегация в group_by с полярами ⇐ Python
Программы на Python
-
Anonymous
1772212049
Anonymous
Мне нужно вычислить средневзвешенное значение процента после группировки по полярностям. Поскольку мне априори нужна общая сумма в качестве знаменателя среднего значения, я думаю, что необходимо создать специальную функцию, которая будет применяться в методе agg().
Это пример того, что я пробовал (не работает):
import polars as pl
df_group = df.group_by(pl.col("entity"))
.agg(
total_amount=pl.col("amount").sum(),
pct_avg=(
pl.col("pct")
* pl.col("amount")
/ pl.col("total_amount")
).sum(),
)
Вот минимальный пример:
a = pl.DataFrame(
{
"entity": ["x", "x", "y", "y"],
"pct": [0.5, 0.4, 0.4, 0.2],
"amount": [1, 10, 100, 1000],
}
)
┌────────┬─────┬────────┐
│ entity ┆ pct ┆ amount │
│ --- ┆ --- ┆ --- │
│ str ┆ f64 ┆ i64 │
╞════════╪═════╪════════╡
│ x ┆ 0.5 ┆ 1 │
│ x ┆ 0.4 ┆ 10 │
│ y ┆ 0.4 ┆ 100 │
│ y ┆ 0.2 ┆ 1000 │
└────────┴─────┴────────┘
И ожидаемый результат:
a_group = pl.DataFrame(
{
"entity": ["x", "y"],
"total_amount": [11, 1100],
"pct_avg": ["(0.5 * 1 + 0.4 * 10)/11", "(0.4 * 100 + 0.2 *1000)/1100"],
}
)
┌────────┬──────────────┬──────────────────────────────┐
│ entity ┆ total_amount ┆ pct_avg │
│ --- ┆ --- ┆ --- │
│ str ┆ i64 ┆ str │
╞════════╪══════════════╪══════════════════════════════╡
│ x ┆ 11 ┆ (0.5 * 1 + 0.4 * 10)/11 │
│ y ┆ 1100 ┆ (0.4 * 100 + 0.2 *1000)/1100 │
└────────┴──────────────┴──────────────────────────────┘
Подробнее здесь: [url]https://stackoverflow.com/questions/79897979/customized-aggregation-in-group-by-with-polars[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия