Как узнать, когда использовать Map_elements, Map_batches, Lambda и struct при использовании UDF?Python

Программы на Python
Ответить
Anonymous
 Как узнать, когда использовать Map_elements, Map_batches, Lambda и struct при использовании UDF?

Сообщение 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 │
└───────┴───────────┴─────────┴────────┘


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

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

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

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

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

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