Как переписать функцию манипулирования строками `map_elements`, используя выражения Polars?Python

Программы на Python
Ответить
Anonymous
 Как переписать функцию манипулирования строками `map_elements`, используя выражения Polars?

Сообщение Anonymous »

1. Данные
У меня есть следующий кадр данных, созданный в полярах:

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

import polars as pl
data = {"name": ['a', 'b'], "value": ['1-a-2-#', '2-b-3-*']}
df = pl.DataFrame(data)
print(df)
Выход:

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

shape: (2, 2)
┌──────┬─────────┐
│ name ┆ value   │
│ ---  ┆ ---     │
│ str  ┆ str     │
╞══════╪═════════╡
│ a    ┆ 1-a-2-# │
│ b    ┆ 2-b-3-* │
└──────┴─────────┘
2. Что я хочу сделать
Я хотел бы создать новый столбец с именем value_new, который содержит только первые два «числовых» элемента в столбце value, и они снова будут разделены знаком -.
Я могу сделать это с помощью лямбда-функции, предоставленной методу .map_elements():

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

separator = '-'

str_lambda = (lambda name:
name.split(separator)[0]
+ separator
+ name.split(separator)[2]
)

df_1 = df.with_columns(
pl.col('value')
.map_elements(str_lambda)
.alias('value_new')
)

print(df_1)
Выход:

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

shape: (2, 3)
┌──────┬─────────┬───────────┐
│ name ┆ value   ┆ value_new │
│ ---  ┆ ---     ┆ ---       │
│ str  ┆ str     ┆ str       │
╞══════╪═════════╪═══════════╡
│ a    ┆ 1-a-2-# ┆ 1-2       │
│ b    ┆ 2-b-3-* ┆ 2-3       │
└──────┴─────────┴───────────┘
3. Мой вопрос:
Как добиться того же, используя выражение поляров?
Я спрашиваю об этом, потому что в документе для Polars.Expr.map_elements есть предупреждение о том, что "Этот метод намного медленнее, чем собственный API выражений".
Итак, я хотел бы знать, как реализовать то же самое с помощью собственные выражения, которые будут идентифицировать и объединять некоторые элементы в столбце типа данных str.
Спасибо.
(То, что я пробовал и чего ожидаю, описано выше.)

Подробнее здесь: https://stackoverflow.com/questions/778 ... ars-expres
Ответить

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

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

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

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

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