Если бы у меня были следующие данные об игрушках:
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
Могу ли я условно извлечь данные в несколько столбцов с помощью одного «когда»? ⇐ Python
Программы на Python
1768525347
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 │
└───────────┴────────────┘
Подробнее здесь: [url]https://stackoverflow.com/questions/79702857/can-i-conditionally-extract-data-into-multiple-columns-with-a-single-when[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия