import polars as pl
import numpy as np
df_sim = pl.DataFrame({
"daily_n": [1000, 2000, 3000, 4000],
"prob": [.5, .5, .5, .6],
"size": 1
})
df_sim = df_sim.with_columns(
pl.struct("daily_n", "prob", "size")
.map_elements(lambda x:
np.random.binomial(n=x['daily_n'], p=x['prob'], size=x['size']))
.cast(pl.Int32)
.alias('events')
)
df_sim
shape: (4, 4)
┌─────────┬──────┬──────┬────────┐
│ daily_n ┆ prob ┆ size ┆ events │
│ --- ┆ --- ┆ --- ┆ --- │
│ i64 ┆ f64 ┆ i32 ┆ i32 │
╞═════════╪══════╪══════╪════════╡
│ 1000 ┆ 0.5 ┆ 1 ┆ 491 │
│ 2000 ┆ 0.5 ┆ 1 ┆ 979 │
│ 3000 ┆ 0.5 ┆ 1 ┆ 1524 │
│ 4000 ┆ 0.6 ┆ 1 ┆ 2449 │
└─────────┴──────┴──────┴────────┘
Однако следующий код завершится ошибкой с сообщением
"TypeError: аргумент float() должен быть строкой или числом, а не 'Expr'"
df_sim.with_columns(
np.random.binomial(n=pl.col('daily_n'), p=pl.col('prob'), size=pl.col('size'))
.alias('events')
)
Почему некоторые функции требуют использования struct(), map_elements() и лямбда, а другие — нет?
В моем случае ниже я могу просто ссылаться на столбцы поляров как на аргументы функции, используя col().
def local_double(x):
return(2*x)
df_ab = pl.DataFrame({
"group": ["A", "A", "B", "B"],
"converted": [True, False, True, True],
"revenue": [150, 200, 300, 500]
})
df_ab.with_columns(rev_2x = local_double(pl.col("revenue")))
shape: (4, 4)
┌───────┬───────────┬─────────┬────────┐
│ group ┆ converted ┆ revenue ┆ rev_2x │
│ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ bool ┆ i64 ┆ i64 │
╞═══════╪═══════════╪═════════╪════════╡
│ A ┆ true ┆ 150 ┆ 300 │
│ A ┆ false ┆ 200 ┆ 400 │
│ B ┆ true ┆ 300 ┆ 600 │
│ B ┆ true ┆ 500 ┆ 1000 │
└───────┴───────────┴─────────┴────────┘
Подробнее здесь: https://stackoverflow.com/questions/788 ... when-using
Как узнать, когда использовать Map_elements, Map_batches, Lambda и struct при использовании UDF? ⇐ Python
Программы на Python
1772183732
Anonymous
import polars as pl
import numpy as np
df_sim = pl.DataFrame({
"daily_n": [1000, 2000, 3000, 4000],
"prob": [.5, .5, .5, .6],
"size": 1
})
df_sim = df_sim.with_columns(
pl.struct("daily_n", "prob", "size")
.map_elements(lambda x:
np.random.binomial(n=x['daily_n'], p=x['prob'], size=x['size']))
.cast(pl.Int32)
.alias('events')
)
df_sim
shape: (4, 4)
┌─────────┬──────┬──────┬────────┐
│ daily_n ┆ prob ┆ size ┆ events │
│ --- ┆ --- ┆ --- ┆ --- │
│ i64 ┆ f64 ┆ i32 ┆ i32 │
╞═════════╪══════╪══════╪════════╡
│ 1000 ┆ 0.5 ┆ 1 ┆ 491 │
│ 2000 ┆ 0.5 ┆ 1 ┆ 979 │
│ 3000 ┆ 0.5 ┆ 1 ┆ 1524 │
│ 4000 ┆ 0.6 ┆ 1 ┆ 2449 │
└─────────┴──────┴──────┴────────┘
Однако следующий код завершится ошибкой с сообщением
"TypeError: аргумент float() должен быть строкой или числом, а не 'Expr'"
df_sim.with_columns(
np.random.binomial(n=pl.col('daily_n'), p=pl.col('prob'), size=pl.col('size'))
.alias('events')
)
Почему некоторые функции требуют использования struct(), map_elements() и лямбда, а другие — нет?
В моем случае ниже я могу просто ссылаться на столбцы поляров как на аргументы функции, используя col().
def local_double(x):
return(2*x)
df_ab = pl.DataFrame({
"group": ["A", "A", "B", "B"],
"converted": [True, False, True, True],
"revenue": [150, 200, 300, 500]
})
df_ab.with_columns(rev_2x = local_double(pl.col("revenue")))
shape: (4, 4)
┌───────┬───────────┬─────────┬────────┐
│ group ┆ converted ┆ revenue ┆ rev_2x │
│ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ bool ┆ i64 ┆ i64 │
╞═══════╪═══════════╪═════════╪════════╡
│ A ┆ true ┆ 150 ┆ 300 │
│ A ┆ false ┆ 200 ┆ 400 │
│ B ┆ true ┆ 300 ┆ 600 │
│ B ┆ true ┆ 500 ┆ 1000 │
└───────┴───────────┴─────────┴────────┘
Подробнее здесь: [url]https://stackoverflow.com/questions/78868024/how-to-know-when-to-use-map-elements-map-batches-lambda-and-struct-when-using[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия