Код: Выделить всё
lf = pl.LazyFrame([
pl.Series("a", ...),
pl.Series("b", ...),
pl.Series("c", ...),
pl.Series("i", ...)
])
Код: Выделить всё
def update(a, b, c, i):
s = a + b + c + i
a /= s
b /= s
c /= s
return a, b, c
Как мы можем обновить каждый строку кадра с помощью функции?
Мы могли бы использовать with_columns для независимого обновления строк каждого столбца, но как мы можем сделать это, учитывая зависимость между столбцами?
Редактировать
В ответ к комментариям @roman давайте ужесточить вопрос.
Используйте этот LazyFrame
Код: Выделить всё
lf = pl.LazyFrame(
[
pl.Series("a", [1, 2, 3, 4], dtype=pl.Int8),
pl.Series("b", [5, 6, 7, 8], dtype=pl.Int8),
pl.Series("c", [9, 0, 1, 2], dtype=pl.Int8),
pl.Series("i", [3, 4, 5, 6], dtype=pl.Int8),
pl.Series("o", [7, 8, 9, 0], dtype=pl.Int8),
]
)
Наиболее близкое, что мы можем получить, — это использовать подобную функцию обновления.
Код: Выделить всё
def update(args):
s = args["a"] + args["b"] + args["c"] + args["i"]
args["a"] /= s
args["b"] /= s
args["c"] /= s
return args.values()
Код: Выделить всё
(
lf.select(
pl.struct(pl.col("a", "b", "c", "i"))
.map_elements(update, return_dtype=pl.List(pl.Float64))
.list.to_struct(fields=["a", "b", "c", "i"])
.alias("result"),
)
.unnest("result")
.collect()
)
- Мы потеряли столбец o.
< li>Столбец i стал Float64. - Это довольно некрасиво.
Подробнее здесь: https://stackoverflow.com/questions/792 ... ltaneously
Мобильная версия