Как случайным образом выбрать n идентификаторов для каждой комбинации group_id и даты в кадре данных PolarsPython

Программы на Python
Ответить
Anonymous
 Как случайным образом выбрать n идентификаторов для каждой комбинации group_id и даты в кадре данных Polars

Сообщение Anonymous »

Я пытаюсь случайным образом выбрать n идентификаторов для каждой комбинации group_id и даты в кадре данных Polars. Однако я заметил, что примерная функция создает один и тот же набор идентификаторов для каждой даты независимо от группы.
Поскольку мне нужно установить начальное значение для целей репликации, я считаю, что проблема возникает из-за того, что одно и то же начальное значение применяется ко всем комбинациям. Я попытался решить эту проблему, создав уникальное начальное число для каждой комбинации, создав столбец «group_date_int», объединив group_id и date, преобразованные как Int64, но я столкнулся со следующей ошибкой:

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

.sample(n=n_samples, shuffle=True, seed=pl.col("group_date_int"))
TypeError: argument 'seed': 'Expr' object cannot be interpreted as an integer
Для каждой даты я получаю один и тот же набор идентификаторов, а не разные случайные выборки для каждой комбинации group_id и даты.

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

import polars as pl

df = pl.DataFrame(
{
"date": pl.date_range(
pl.date(2010, 1, 1), pl.date(2025, 12, 1), "1mo", eager=True
).implode(),
"group_id": [["bd01", "bd02", "bd03"]],
"ids": [list(range(10))],
}
).explode("date").explode("group_id").explode("ids")

# Parameters
n_samples = 3  # Number of random samples to pick for each group
SEED = 42  # The seed used for sampling

# Create `selected_samples` by sampling `n_samples` IDs per (group_id, date) combination
selected_samples = (
df
.group_by(['group_id', 'date'])
.agg(
pl.col("id")
.sample(n=n_samples, shuffle=True, seed=SEED)
.alias("random_ids")
)
.explode("random_ids")
.select(["group_id", "date", "random_ids"])
.rename({"random_ids": "id"})
)
Кроме того, я пробовал использовать функцию перемешивания, но результаты те же: 1,6,5...1,6,5

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

┌──────────┬────────────┬─────┐
│ group_id ┆ date       ┆ id  │
│ ---      ┆ ---        ┆ --- │
│ str      ┆ str        ┆ i64 │
╞══════════╪════════════╪═════╡
│ bd01     ┆ 2025-07-01 ┆ 1   │
│ bd01     ┆ 2025-07-01 ┆ 6   │
│ bd01     ┆ 2025-07-01 ┆ 5   │
│ bd01     ┆ 2012-03-01 ┆ 1   │
│ bd01     ┆ 2012-03-01 ┆ 6   │
│ …        ┆ …          ┆ …   │
│ bd03     ┆ 2024-10-01 ┆ 6   │
│ bd03     ┆ 2024-10-01 ┆ 5   │
│ bd01     ┆ 2010-08-01 ┆ 1   │
│ bd01     ┆ 2010-08-01 ┆ 6   │
│ bd01     ┆ 2010-08-01 ┆ 5   │
└──────────┴────────────┴─────┘
В комментариях мне ответили на следующий вопрос: Образец из каждой группы в кадре данных Polars?, где была поднята аналогичная проблема. Однако решение не включает начальное значение, необходимое для репликации.


Подробнее здесь: https://stackoverflow.com/questions/795 ... -in-a-pola
Ответить

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

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

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

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

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