Код: Выделить всё
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)
В 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)
)
Код: Выделить всё
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')
Вопрос:
Есть ли в Polars более простой или более идиоматический способ условно установить несколько элементов в столбце, аналогичный синтаксису Pandas loc?>
Подробнее здесь: https://stackoverflow.com/questions/792 ... -in-pandas
Мобильная версия