Как присвоить несколько значений определенным местам в серии в выражении?Python

Программы на Python
Ответить
Anonymous
 Как присвоить несколько значений определенным местам в серии в выражении?

Сообщение Anonymous »

В pandas для назначения элементов можно использовать логическое индексирование:

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

s = pd.Series(['a', 'b', 'c', 'd', 'e'])
idx = [True, False, True, False, True]
s[idx] = ['x', 'y', 'z']
В полярах мы можем сделать это с помощью разброса:

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

s = pl.Series(['a', 'b', 'c', 'd', 'e'])
idx = pl.Series([True, False, True, False, True])
s = s.scatter(idx.arg_true(), ['x', 'y', 'z']) # arg_true() gives us integer indices
Однако я изо всех сил пытаюсь понять, как это сделать в контексте выражения, поскольку я не могу сделать df['col'] = df['col'].scatter.... Вместо этого Polars предлагает использовать with_columns:

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

import polars as pl
from polars import col, when

df = pl.DataFrame({
"my_col": ['a', 'b', 'c', 'd', 'e'],
"idx": [True, False, True, False, True]
})

new_values = ['x', 'y', 'z']
df = df.with_columns(
when(col("idx")).then(new_values) # how to do this?
.otherwise(col("my_col"))
)
Мой метод обойти эту проблему несколько трудоемкий, и должен быть более простой способ:

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

s = df["my_col"].clone()
s = s.scatter(df["idx"].arg_true(), new_values)
df = df.with_columns(s.alias("my_col"))

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

shape: (5, 2)
┌────────┬───────┐
│ my_col ┆ idx   │
│ ---    ┆ ---   │
│ str    ┆ bool  │
╞════════╪═══════╡
│ x      ┆ true  │
│ b      ┆ false │
│ y      ┆ true  │
│ d      ┆ false │
│ z      ┆ true  │
└────────┴───────┘
Синтаксически это не так уж и плохо, но есть ли более простой способ просто обновить серию списком значений (или другую серию)?


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

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

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

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

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

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