Ожидается ли поведение `pl.int_ranges(scalar1, scalar2).list.sample(n)` для создания столбца с той же заполненной выборкPython

Программы на Python
Ответить
Anonymous
 Ожидается ли поведение `pl.int_ranges(scalar1, scalar2).list.sample(n)` для создания столбца с той же заполненной выборк

Сообщение Anonymous »

При наличии DataFrame со столбцом из нескольких строк я пытаюсь создать столбец с разными случайными выборками для каждой строки из одного и того же диапазона, поэтому я попытался написать следующее:

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

>>> import polars as pl
>>> df = pl.select(pl.int_range(1,100).sample(5).alias('a'))
>>> df.with_columns(pl.int_ranges(3, 5).list.sample(2))
Но он генерирует столбец с одинаковой выборкой для всех строк:

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

>>> df = pl.select(pl.int_range(1,100).sample(5).alias('a'))
>>> df.with_columns(pl.int_ranges(1, 5).list.sample(2))
shape: (5, 2)
┌─────┬───────────┐
│ a   ┆ literal   │
│ --- ┆ ---       │
│ i64 ┆ list[i64] │
╞═════╪═══════════╡
│ 46  ┆ [3, 2]    │
│ 5   ┆ [3, 2]    │
│ 41  ┆ [3, 2]    │
│ 95  ┆ [3, 2]    │
│ 84  ┆ [3, 2]    │
└─────┴───────────┘
в котором, как я ожидал, образцы строк различаются:

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

>>> df.with_columns(pl.int_ranges(1, 5).list.sample(2))
shape: (5, 2)
┌─────┬───────────┐
│ a   ┆ literal   │
│ --- ┆ ---       │
│ i64 ┆ list[i64] │
╞═════╪═══════════╡
│ 46  ┆ [3, 4]    │
│ 5   ┆ [2, 1]    │
│ 41  ┆ [4, 3]    │
│ 95  ┆ [1, 4]    │
│ 84  ┆ [1, 3]    │
└─────┴───────────┘
Я подумал, что это моя ошибка — не преобразовать диапазон в столбец, поэтому я попытался заменить скалярный диапазон на pl.lit, но результат тот же:

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

>>> df.with_columns(pl.int_ranges(pl.lit(1), pl.lit(5)).list.sample(2))
shape: (5, 2)
┌─────┬───────────┐
│ a   ┆ literal   │
│ --- ┆ ---       │
│ i64 ┆ list[i64] │
╞═════╪═══════════╡
│ 46  ┆ [1, 4]    │
│ 5   ┆ [1, 4]    │
│ 41  ┆ [1, 4]    │
│ 95  ┆ [1, 4]    │
│ 84  ┆ [1, 4]    │
└─────┴───────────┘
Этот API int_ranges работает, как и ожидалось, если я разделю цепной вызов на 2 шага:

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

>>> df.with_columns(pl.int_ranges(1, 5).alias('range')).with_columns(pl.col('range').list.sample(2))
shape: (5, 2)
┌─────┬───────────┐
│ a   ┆ range     │
│ --- ┆ ---       │
│ i64 ┆ list[i64] │
╞═════╪═══════════╡
│ 46  ┆ [4, 3]    │
│ 5   ┆ [2, 1]    │
│ 41  ┆ [2, 1]    │
│ 95  ┆ [2, 3]    │
│ 84  ┆ [2, 3]    │
└─────┴───────────┘
Мой вопрос: почему pl.int_ranges ведет себя по-разному при выборке цепочки вызовов с раздельным вызовом? в чем разница?

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

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

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

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

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

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