У меня есть следующий кадр данных, созданный в полярах:
Код: Выделить всё
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-* │
└──────┴─────────┘
Я хотел бы создать новый столбец с именем 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 │
└──────┴─────────┴───────────┘
Как добиться того же, используя выражение поляров?
Я спрашиваю об этом, потому что в документе для Polars.Expr.map_elements есть предупреждение о том, что "Этот метод намного медленнее, чем собственный API выражений".
Итак, я хотел бы знать, как реализовать то же самое с помощью собственные выражения, которые будут идентифицировать и объединять некоторые элементы в столбце типа данных str.
Спасибо.
(То, что я пробовал и чего ожидаю, описано выше.)
Подробнее здесь: https://stackoverflow.com/questions/778 ... ars-expres
Мобильная версия