Python-поляры: от коэффициентов, значений и (вложенных) списков к взвешенным значениямPython

Программы на Python
Anonymous
Python-поляры: от коэффициентов, значений и (вложенных) списков к взвешенным значениям

Сообщение Anonymous »

Предположим, у меня есть фрейм данных Polars, похожий на этот:

Код: Выделить всё

import polars as pl
from decimal import Decimal

df = pl.from_dicts(
[
{"id": 1, "value": Decimal("100.0"), "items": ["A"]},
{"id": 2, "value": Decimal("150.000"), "items": ["A", "B"]},
{"id": 3, "value": Decimal("70.0000"), "items": ["A", "B", "C"]},
]
)


id → pl.Int64
значение → pl.Decimal
items → pl.List(str)




1
100
2
150

Код: Выделить всё

["A", "B"]

3
70

Код: Выделить всё

["A", "B", "C"]


И следующий словарь Python:< /p>

Код: Выделить всё

coef = {"A": Decimal("0.2"), "B": Decimal("0.35"), "C": Decimal("0.45") }
Отсюда, как получить следующий DataFrame эффективным способом с помощью Polars?

Код: Выделить всё

┌─────┬────────────────┬──────┐
│ id  ┆ value          ┆ item │
│ --- ┆ ---            ┆ ---  │
│ i64 ┆ decimal[*,10]  ┆ str  │
╞═════╪════════════════╪══════╡
│ 1   ┆ 100.0000000000 ┆ A    │
│ 2   ┆ 54.5454000000  ┆ A    │
│ 2   ┆ 95.4544500000  ┆ B    │
│ 3   ┆ 14.0000000000  ┆ A    │
│ 3   ┆ 24.5000000000  ┆ B    │
│ 3   ┆ 31.5000000000  ┆ C    │
└─────┴────────────────┴──────┘
В этом примере 54,5454..., например, соответствует 0,2 / (0,2 + 0,35) * 150.
Обратите внимание, что длина словаря coef не всегда одинакова. По сути, это выглядит как {key1: coef1, key2: coef2, ... с n ключами и n значениями (сумма которых равна Decimal(1)) .
Кроме того, я работаю с десятичными значениями (а не со значениями float64).

Подробнее здесь: https://stackoverflow.com/questions/760 ... ted-values

Вернуться в «Python»