Как эффективно создать экземпляр массива/списка одного элемента в выражениях Polars?Python

Программы на Python
Ответить
Anonymous
 Как эффективно создать экземпляр массива/списка одного элемента в выражениях Polars?

Сообщение Anonymous »

Мне нужно преобразовать каждый элемент в Polars df в следующую структуру:

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

{
"value": "A",
"lineItemName": "value",
"dimensions": [
{
"itemCode": 1,
"dimensionName": "Clients"
}
]
}
где value соответствует значению этого элемента, lineItemName — имени столбца, itemCode — значению, хранящемуся в
ключевом столбце в строке этого элемента, а DimensionName — заданному литералу.
Например

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

df = pl.DataFrame({"key": [1, 2, 3, 4, 5], "value": ["A", "B", "C", "D", "E"]})
Должно получиться:

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

shape: (5, 1)
╭─────────────────────────╮
│ value                   │
│ ---                     │
│ struct[3]               │
╞═════════════════════════╡
│ {"A","value",[{1,"D"}]} │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ {"B","value",[{2,"D"}]} │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ {"C","value",[{3,"D"}]} │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ {"D","value",[{4,"D"}]} │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ {"E","value",[{5,"D"}]} │
╰─────────────────────────╯
Изображение

Моя текущая реализация:

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

df = df.with_columns(
pl.struct(
pl.col(col).alias("value"),
pl.lit(col).alias("lineItemName"),
pl.concat_list(
pl.struct(pl.col("key").alias("itemCode"), pl.lit("D").alias("dimensionName"))
).alias("dimensions"),
).alias(col)
for col in df.columns
if not col == "key"
).drop("key")
Моя проблема связана с выражением pl.concat_list(). В моем случае список, содержащий структуру измерения, гарантированно
всегда содержит только один элемент. Вот почему я ищу способ избежать значительного (и в моем случае
ненужного) снижения производительности pl.concat_list().
В идеале я мог бы просто:

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

pl.lit(
[pl.struct(pl.col("key").alias("itemCode"), pl.lit("D").alias("dimensionName"))]
).alias("dimensions")
но на данный момент это вызывает TypeError: еще не реализовано: вложенные типы объектов.
Я пробовал варианты вышеизложенного, но, похоже, в какой-то момент я не могу избежать столкновения с вложенным выражением. Есть ли
есть ли какой-нибудь способ чисто создать экземпляр этого списка отдельных элементов или, что еще лучше, массива?

Подробнее здесь: https://stackoverflow.com/questions/794 ... fficiently
Ответить

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

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

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

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

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