Как заменить несколько значений столбца на условие «когда-то-иначе» в Polars?Python

Программы на Python
Anonymous
Как заменить несколько значений столбца на условие «когда-то-иначе» в Polars?

Сообщение Anonymous »

У меня есть следующий фрейм данных:
import polars as pl

df = pl.DataFrame({'r_num':['Yes', '', 'Yes'], 'pin': ['Yes','',''],'fin':['','','']})

shape: (3, 3)
┌───────┬─────┬─────┐
│ r_num ┆ pin ┆ fin │
│ --- ┆ --- ┆ --- │
│ str ┆ str ┆ str │
╞═══════╪═════╪═════╡
│ Yes ┆ Yes ┆ │
│ ┆ ┆ │
│ Yes ┆ ┆ │
└───────┴─────┴─────┘

Здесь я хотел бы найти наблюдение, у которого r_num — ДА, PIN-код — Да, а fin — ПУСТОЙ. при выполнении этого условия r_num и pin должны быть заполнены как ПУСТЫЕ.
df.with_columns(
pl.when((pl.col('r_num')=='Yes') & (pl.col('pin')=='Yes') & (pl.col('fin') !='Yes'))
.then(pl.col('r_num')=='')
.otherwise(pl.col('r_num'))
)

shape: (3, 3)
┌───────┬─────┬─────┐
│ r_num ┆ pin ┆ fin │
│ --- ┆ --- ┆ --- │
│ str ┆ str ┆ str │
╞═══════╪═════╪═════╡
│ false ┆ Yes ┆ │
│ ┆ ┆ │
│ Yes ┆ ┆ │
└───────┴─────┴─────┘

Почему r_num заполняется ложью?
В пандах я бы сделал вот так:
df_pd = df.to_pandas()
df_pd.loc[(df_pd['r_num']=='Yes') & (df_pd['pin']=='Yes') & (df_pd['fin']!='Yes'),['r_num','pin']] = ''

Ожидаемый результат:
shape: (3, 3)
┌───────┬─────┬─────┐
│ r_num ┆ pin ┆ fin │
│ --- ┆ --- ┆ --- │
│ str ┆ str ┆ str │
╞═══════╪═════╪═════╡
│ ┆ ┆ │
│ ┆ ┆ │
│ Yes ┆ ┆ │
└───────┴─────┴─────┘


Подробнее здесь: https://stackoverflow.com/questions/737 ... se-in-pola

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