Используйте поляры «когда-то-иначе» одновременно в нескольких выходных столбцах.Python

Программы на Python
Anonymous
Используйте поляры «когда-то-иначе» одновременно в нескольких выходных столбцах.

Сообщение Anonymous »

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

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

import polars as pl

df = pl.DataFrame({
'item':         ['CASH', 'CHECK', 'DEBT', 'CHECK', 'CREDIT', 'CASH'],
'quantity':     [100, -20, 0, 10, 0, 0],
'value':        [99, 47, None, 90, None, 120],
'value_other':  [97, 57, None, 91, None, 110],
'value_other2': [94, 37, None, 93, None, 115],
})

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

┌────────┬──────────┬───────┬─────────────┬──────────────┐
│ item   ┆ quantity ┆ value ┆ value_other ┆ value_other2 │
│ ---    ┆ ---      ┆ ---   ┆ ---         ┆ ---          │
│ str    ┆ i64      ┆ i64   ┆ i64         ┆ i64          │
╞════════╪══════════╪═══════╪═════════════╪══════════════╡
│ CASH   ┆ 100      ┆ 99    ┆ 97          ┆ 94           │
│ CHECK  ┆ -20      ┆ 47    ┆ 57          ┆ 37           │
│ DEBT   ┆ 0        ┆ null  ┆ null        ┆ null         │
│ CHECK  ┆ 10       ┆ 90    ┆ 91          ┆ 93           │
│ CREDIT ┆ 0        ┆ null  ┆ null        ┆ null         │
│ CASH   ┆ 0        ┆ 120   ┆ 110         ┆ 115          │
└────────┴──────────┴───────┴─────────────┴──────────────┘
Теперь я хочу установить для всех столбцов значений значение 0 для всех строк, где значение равно нулю и количество == 0.
Прямо сейчас у меня есть это решение

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

cols = ['value', 'value_other', 'value_other2']
df   = df.with_columns(
pl.when(pl.col('value').is_null() & (pl.col('quantity') == 0))
.then(0)
.otherwise(pl.col(col))
.alias(col)
for col in cols
)
что правильно дает

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

┌────────┬──────────┬───────┬─────────────┬──────────────┐
│ item   ┆ quantity ┆ value ┆ value_other ┆ value_other2 │
│ ---    ┆ ---      ┆ ---   ┆ ---         ┆ ---          │
│ str    ┆ i64      ┆ i64   ┆ i64         ┆ i64          │
╞════════╪══════════╪═══════╪═════════════╪══════════════╡
│ CASH   ┆ 100      ┆ 99    ┆ 97          ┆ 94           │
│ CHECK  ┆ -20      ┆ 47    ┆ 57          ┆ 37           │
│ DEBT   ┆ 0        ┆ 0     ┆ 0           ┆ 0            │
│ CHECK  ┆ 10       ┆ 90    ┆ 91          ┆ 93           │
│ CREDIT ┆ 0        ┆ 0     ┆ 0           ┆ 0            │
│ CASH   ┆ 0        ┆ 120   ┆ 110         ┆ 115          │
└────────┴──────────┴───────┴─────────────┴──────────────┘
Однако я считаю, что это очень неэффективно, поскольку мое условие if выполняется для каждого столбца значений. Есть ли способ добиться этого, используя только полярные внутренние функции и без встроенного цикла for?

Подробнее здесь: https://stackoverflow.com/questions/788 ... ns-at-once

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