Могу ли я условно извлечь данные в несколько столбцов с помощью одного «когда»?Python

Программы на Python
Ответить
Anonymous
 Могу ли я условно извлечь данные в несколько столбцов с помощью одного «когда»?

Сообщение Anonymous »

Если бы у меня были следующие данные об игрушках:
import polars as pl
data = [
{"name_full": "McCartney, Paul"},
{"name_last": "Lennon", "name_first": "John"},
{"name_full": "Starr, Ringo"},
{"name_last": "Harrison", "name_first": "George"}
]
df = pl.DataFrame(data)
df

shape: (4, 3)
┌─────────────────┬───────────┬────────────┐
│ name_full ┆ name_last ┆ name_first │
│ --- ┆ --- ┆ --- │
│ str ┆ str ┆ str │
╞═════════════════╪═══════════╪════════════╡
│ McCartney, Paul ┆ null ┆ null │
│ null ┆ Lennon ┆ John │
│ Starr, Ringo ┆ null ┆ null │
│ null ┆ Harrison ┆ George │
└─────────────────┴───────────┴────────────┘

Есть ли в Polars рекомендуемый способ разделить данные полного имени на несколько столбцов без необходимости отдельного pl.when для каждого целевого столбца. Кажется, этого можно добиться с помощью структуры, но мне не удалось придумать правильную логику/синтаксис.
Я могу добиться желаемых результатов с помощью следующего, но это сложно масштабировать для более сложных данных из-за необходимости отдельного pl.when для каждого столбца, куда должны попадать данные.
(
df.with_columns(
pl.col("name_full").str.split(",").list.eval(pl.element().str.strip_chars()).alias("name_parts")
).with_columns(
pl.when(pl.col("name_last").is_null())
.then(pl.col("name_parts").list.get(0, null_on_oob=True))
.otherwise(pl.col("name_last")).alias("name_last"),
pl.when(pl.col("name_first").is_null())
.then(pl.col("name_parts").list.get(1, null_on_oob=True))
.otherwise(pl.col("name_first")).alias("name_first")
).select(pl.all().exclude("name_full", "name_parts"))
)

shape: (4, 2)
┌───────────┬────────────┐
│ name_last ┆ name_first │
│ --- ┆ --- │
│ str ┆ str │
╞═══════════╪════════════╡
│ McCartney ┆ Paul │
│ Lennon ┆ John │
│ Starr ┆ Ringo │
│ Harrison ┆ George │
└───────────┴────────────┘


Подробнее здесь: https://stackoverflow.com/questions/797 ... ingle-when
Ответить

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

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

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

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

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