Альтернативы для длинных цепочек .when().then().when().then().otherwise()Python

Программы на Python
Anonymous
Альтернативы для длинных цепочек .when().then().when().then().otherwise()

Сообщение Anonymous »

Есть ли умные альтернативы написанию длинных цепочек if().then().otherwise() без жесткого кодирования значений, см. пример ниже:
Предположим, у нас есть следующий кадр данных
import polars as pl

df = pl.DataFrame(
{
"Market":["AT", "AT", "DE", "DE", "CA", "DE", "UK", "US"],
"Number of Days":[1, 2, 3, 4, 3, 4, 2, 1],

}
)

Пользователь определяет некоторые условия в виде словаря для разных стран
params = {
"AT":{"Value": 1},
"DE":{"Value": 2},
"CA":{"Value": 3},
"UK":{"Value": 1},
"US":{"Value": 2}
}

Затем я жестко закодирую страны и использую страны в Polars .with_columns(), как показано ниже:
(
df
.with_columns(
pl.when(pl.col("Market") == "AT").then(pl.col("Number of Days") + params["AT"]["Value"])
.when(pl.col("Market") == "DE").then(pl.col("Number of Days") + params["DE"]["Value"])
.when(pl.col("Market") == "CA").then(pl.col("Number of Days") + params["CA"]["Value"])
.when(pl.col("Market") == "UK").then(pl.col("Number of Days") + params["UK"]["Value"])
.when(pl.col("Market") == "US").then(pl.col("Number of Days") + params["US"]["Value"])
.otherwise(None)
.alias("New Column")
)
)

Есть ли способ не жестко закодировать страны в .with_columns, а каким-то образом просмотреть словарь и создать выражение на основе предоставленных значений?¨
Я попробовал приведенное ниже, но он говорит, что у меня повторяются имена столбцов.
exprs = []
for market, data in params.items():
condition = (pl.col("Market") == market)
result = (pl.col("Number of Days") + data["Value"])
expr = pl.when(condition).then(result)
exprs.append(expr)

df.with_columns(exprs)


Подробнее здесь: https://stackoverflow.com/questions/765 ... ise-chains

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