Добавьте новый столбец с несколькими литеральными значениями в кадр данных Polars.Python

Программы на Python
Ответить
Anonymous
 Добавьте новый столбец с несколькими литеральными значениями в кадр данных Polars.

Сообщение Anonymous »

Рассмотрим следующий пример игрушки:

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

import polars as pl

pl.Config(tbl_rows=-1)

df = pl.DataFrame({"group": ["A", "A", "A", "B", "B"], "value": [1, 2, 3, 4, 5]})

print(df)

shape: (5, 2)
┌───────┬───────┐
│ group ┆ value │
│ ---   ┆ ---   │
│ str   ┆ i64   │
╞═══════╪═══════╡
│ A     ┆ 1     │
│ A     ┆ 2     │
│ A     ┆ 3     │
│ B     ┆ 4     │
│ B     ┆ 5     │
└───────┴───────┘
Кроме того, у меня есть список значений индикатора, например vals=[10, 20, 30].
Я ищу эффективный способ вставить каждое из этих значений в новый столбец с именем «indicator, используя pl.lit(), при этом расширяя фрейм данных по вертикали таким образом, чтобы все существующие строки повторялись для каждого нового элемента в vals.
Мое текущее решение — вставить новый столбец в df, добавить его в список и затем выполнить pl.concat.

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

lit_vals = [10, 20, 30]

print(pl.concat([df.with_columns(indicator=pl.lit(val)) for val in lit_vals]))

shape: (15, 3)
┌───────┬───────┬───────────┐
│ group ┆ value ┆ indicator │
│ ---   ┆ ---   ┆ ---       │
│ str   ┆ i64   ┆ i32       │
╞═══════╪═══════╪═══════════╡
│ A     ┆ 1     ┆ 10        │
│ A     ┆ 2     ┆ 10        │
│ A     ┆ 3     ┆ 10        │
│ B     ┆ 4     ┆ 10        │
│ B     ┆ 5     ┆ 10        │
│ A     ┆ 1     ┆ 20        │
│ A     ┆ 2     ┆ 20        │
│ A     ┆ 3     ┆ 20        │
│ B     ┆ 4     ┆ 20        │
│ B     ┆ 5     ┆ 20        │
│ A     ┆ 1     ┆ 30        │
│ A     ┆ 2     ┆ 30        │
│ A     ┆ 3     ┆ 30        │
│ B     ┆ 4     ┆ 30        │
│ B     ┆ 5     ┆ 30        │
└───────┴───────┴───────────┘
Поскольку df потенциально может иметь довольно много строк и столбцов, мне интересно, эффективно ли мое решение с точки зрения скорости, а также распределения памяти?
Просто насколько я понимаю, если я добавлю новый pl.DataFrame в список, будет ли этот фрейм данных использовать дополнительную память или будут созданы просто некоторые новые указатели, которые ссылаются на фрагменты памяти, содержащие данные оригинала дф?

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

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

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

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

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

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