So werden n IDs für jede Kombination aus Gruppen-ID und Datum in einem Polars DataFrame zufällig ausgewähltPython

Python-Programme
Anonymous
 So werden n IDs für jede Kombination aus Gruppen-ID und Datum in einem Polars DataFrame zufällig ausgewählt

Post by Anonymous »

Ich versuche, n IDs für jede Kombination aus group_id und date in einem Polars DataFrame zufällig auszuwählen. Mir ist jedoch aufgefallen, dass die Beispielfunktion unabhängig von der Gruppe für jedes Datum denselben Satz von IDs erzeugt.
Da ich für Replikationszwecke einen Startwert festlegen muss, liegt das Problem meiner Meinung nach daran, dass auf alle Kombinationen derselbe Startwert angewendet wird. Ich habe versucht, dieses Problem zu lösen, indem ich für jede Kombination einen eindeutigen Startwert erstellt habe, indem ich eine „group_date_int“-Spalte generiert habe, indem ich group_id und date in Int64 kombiniert habe, aber ich bin auf den folgenden Fehler gestoßen:

Code: Select all

.sample(n=n_samples, shuffle=True, seed=pl.col("group_date_int"))
TypeError: argument 'seed': 'Expr' object cannot be interpreted as an integer
Für jedes Datum erhalte ich denselben Satz von IDs, anstatt für jede Kombination aus Gruppen-ID und Datum eine andere Zufallsstichprobe zu haben.

Code: Select all

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"})
)
Außerdem habe ich versucht, die Shuffle-Funktion zu verwenden, aber die Ergebnisse sind die gleichen: 1,6,5...1,6,5

Code: Select all

┌──────────┬────────────┬─────┐
│ 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   │
└──────────┴────────────┴─────┘
Ich wurde in den Kommentaren auf die folgende Frage verwiesen: „Probe aus jeder Gruppe im Polardatenrahmen?“, wo ein ähnliches Problem angesprochen wurde. Die Lösung enthält jedoch keinen Seed, der für die Replikation benötigt wird.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post