Polars-Python: Zeitreihenverschiebungserstellung mit AusdrückenPython

Python-Programme
Anonymous
 Polars-Python: Zeitreihenverschiebungserstellung mit Ausdrücken

Post by Anonymous »

Ich verwende Polare, um eine Zeitreihenanalyse durchzuführen. Meine Zeitreihe ist möglicherweise nicht vollständig, und die Häufigkeit der Daten kann sich durch ID ändern. Mein Ziel ist es, das unten stehende Spalte "Ergebnis" zu erhalten, wobei ein Ausdruck mit A With_Columns

Code: Select all

import datetime as dt
import polars as pl

df = pl.DataFrame(
{
"id": ["1", "1", "1", "2", "2", "2"],
"reported_period": [
dt.date(2021, 3, 31),
dt.date(2021, 9, 30),
dt.date(2021, 12, 31),
dt.date(2021, 3, 31),
dt.date(2021, 6, 30),
dt.date(2021, 9, 30),
],
"variable": [10, 30, 40, 1, 3, 4],
"result":   [None, None, 30, None, 1, 3],
}
)
shape: (6, 4)
┌─────┬─────────────────┬──────────┬────────┐
│ id  ┆ reported_period ┆ variable ┆ result │
│ --- ┆ ---             ┆ ---      ┆ ---    │
│ str ┆ date            ┆ i64      ┆ i64    │
╞═════╪═════════════════╪══════════╪════════╡
│ 1   ┆ 2021-03-31      ┆ 10       ┆ null   │
│ 1   ┆ 2021-09-30      ┆ 30       ┆ null   │
│ 1   ┆ 2021-12-31      ┆ 40       ┆ 30     │
│ 2   ┆ 2021-03-31      ┆ 1        ┆ null   │
│ 2   ┆ 2021-06-30      ┆ 3        ┆ 1      │
│ 2   ┆ 2021-09-30      ┆ 4        ┆ 3      │
└─────┴─────────────────┴──────────┴────────┘

Bisher habe ich darüber nachgedacht, eine Helfer -Spalte zu verwenden (sagen wir, ich möchte nur 1Q) und dann über die Spalten, die ich habe, aber nicht funktioniert, da ich nicht über den Ausdruck get () aggregieren kann. Ich füge den Code unten ein. Könnten Sie mir bitte helfen oder einen alternativen Ansatz vorschlagen-aber einen einzelnen Ausdruck beibehalten-): < /p>

Code: Select all

df = df.with_columns(
pl.col("reported_period")
.dt.offset_by("-1q")
.dt.month_end()
.alias("reported_period_1Q")
)

df.with_columns(
pl.coalesce(
(
pl.col("variable")
.get(pl.col("reported_period_1Q").index_of(date)
.over("id")).over("id")
.alias(f"rp_{date}_{id}")
for id, date in zip(
list(df.get_column("id")), list(df.get_column("reported_period_1Q"))
)
)
)
)

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post