Как в Polars умножить столбец с плавающей запятой на столбец списков?Python

Программы на Python
Anonymous
Как в Polars умножить столбец с плавающей запятой на столбец списков?

Сообщение Anonymous »

Приведен пример фрейма данных, в котором у нас есть столбец «b», содержащий списки, и каждый список имеет одинаковую длину (поэтому его также можно преобразовать в массивы)
df_test = pl.DataFrame({'a': [1., 2., 3.], 'b': [[2,2,2], [3,3,3], [4,4,4]]})
df_test
shape: (3, 2)
┌─────┬───────────┐
│ a ┆ b │
│ --- ┆ --- │
│ f64 ┆ list[i64] │
╞═════╪═══════════╡
│ 1.0 ┆ [2, 2, 2] │
│ 2.0 ┆ [3, 3, 3] │
│ 3.0 ┆ [4, 4, 4] │
└─────┴───────────┘

Как в итоге получить
shape: (3, 3)
┌─────┬───────────┬────────────────────┐
│ a ┆ b ┆ new │
│ --- ┆ --- ┆ --- │
│ f64 ┆ list[i64] ┆ list[f64] │
╞═════╪═══════════╪════════════════════╡
│ 1.0 ┆ [2, 2, 2] ┆ [2.0, 2.0, 2.0] │
│ 2.0 ┆ [3, 3, 3] ┆ [6.0, 6.0, 6.0] │
│ 3.0 ┆ [4, 4, 4] ┆ [12.0, 12.0, 12.0] │
└─────┴───────────┴────────────────────┘

без использования map_rows?
Лучший способ, который я мог придумать, — это использовать map_rows, что похоже на apply в пандах. Согласно документации, это не самая эффективная вещь, но она работает:
df_temp = df_test.map_rows(lambda x: ([x[0] * i for i in x[1]],))
df_temp.columns = ['new']
df_test = df_test.hstack(df_temp)


Подробнее здесь: https://stackoverflow.com/questions/782 ... n-of-lists

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