Как условно установить несколько элементов в Polars, аналогично .loc в Pandas?Python

Программы на Python
Ответить
Anonymous
 Как условно установить несколько элементов в Polars, аналогично .loc в Pandas?

Сообщение Anonymous »

Я пытаюсь установить несколько элементов в DataFrame Polars на основе условия, аналогично тому, как это делается в Pandas. Вот пример в Pandas:

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

import pandas as pd

df = pd.DataFrame(dict(
A=[1, 2, 3, 4, 5],
B=[0, 5, 9, 2, 10],
))

df.loc[df['A'] < df['B'], 'A'] = [100, 210, 320]
print(df)
Это обновляет столбец A, где A < B с [100, 210, 320].
В Polars я знаю, что обновление DataFrame на месте невозможно, и можно вернуть новый DataFrame с обновленными элементами. Я пробовал следующие методы:
Попытка 1: использование Series.scatter с Map_batches

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

import polars as pl

df = pl.DataFrame(dict(
A=[1, 2, 3, 4, 5],
B=[0, 5, 9, 2, 10],
))

def set_elements(cols):
a, b = cols
return a.scatter((a < b).arg_true(), [100, 210, 320])

df = df.with_columns(
pl.map_batches(['A', 'B'], set_elements)
)
Попытка 2. Создание обновления DataFrame и использование update()

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

df = df.with_row_index()
df_update = df.filter(pl.col('A') < pl.col('B')).select(
'index',
pl.Series('A', [100, 210, 320])
)
df = df.update(df_update, on='index').drop('index')
Оба подхода работают, но они кажутся громоздкими по сравнению с простым синтаксисом Pandas.
Вопрос:

Есть ли в Polars более простой или более идиоматический способ условно установить несколько элементов в столбце, аналогичный синтаксису Pandas loc?>

Подробнее здесь: https://stackoverflow.com/questions/792 ... -in-pandas
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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