Код: Выделить всё
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 │
└───────┴───────┘
Я ищу эффективный способ вставить каждое из этих значений в новый столбец с именем «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 │
└───────┴───────┴───────────┘
Просто насколько я понимаю, если я добавлю новый pl.DataFrame в список, будет ли этот фрейм данных использовать дополнительную память или будут созданы просто некоторые новые указатели, которые ссылаются на фрагменты памяти, содержащие данные оригинала дф?
Подробнее здесь: https://stackoverflow.com/questions/789 ... -dataframe
Мобильная версия