Feature request - Support for filtering specific schemas for collection filter
@borchero ci sta già lavorando.
Dal 23/2/2026.
Valutazione
Questa issue non è ancora stata valutata.
Descrizione
Hi,
An example of filtering specific schema could be:
from decimal import Decimal
import dataframely as dy
import polars as pl
class InvoiceIdSchema(dy.Schema):
invoice_id = dy.String(primary_key=True)
class InvoiceSchema(InvoiceIdSchema):
admission_date = dy.Date(nullable=False)
discharge_date = dy.Date(nullable=False)
received_at = dy.Datetime(nullable=False)
amount = dy.Decimal(nullable=False, min_exclusive=Decimal(0))
@dy.rule()
def discharge_after_admission(cls) -> pl.Expr:
return pl.col("discharge_date") >= pl.col("admission_date")
@dy.rule()
def received_at_after_discharge(cls) -> pl.Expr:
return pl.col("received_at").dt.date() >= pl.col("discharge_date")
class DiagnosisSchema(InvoiceIdSchema):
diagnosis_code = dy.String(primary_key=True, regex=r"[A-Z][0-9]{2,4}")
diagnosis_date = dy.Date(nullable=False)
is_main = dy.Bool(nullable=False)
@dy.rule(group_by=["invoice_id"])
def exactly_one_main_diagnosis(cls) -> pl.Expr:
return pl.col("is_main").sum() == 1
class HospitalClaims(dy.Collection):
invoices: dy.LazyFrame[InvoiceSchema]
diagnoses: dy.LazyFrame[DiagnosisSchema]
@dy.filter(members=["diagnoses"]) # Apply filter only to diagnoses member
def diagnosis_date_after_admission(self) -> pl.LazyFrame:
"""
Filter diagnoses to only include those where diagnosis_date >= admission_date.
This requires joining with invoices to get admission_date.
Returns: LazyFrame with valid diagnoses rows
"""
return self.diagnoses.join(
self.invoices.select(["invoice_id", "admission_date"]),
on="invoice_id",
how="left"
).filter(
pl.col("diagnosis_date") >= pl.col("admission_date")
)
@dy.rule() # Collection-level validation across members
def diagnosis_before_discharge(self) -> pl.LazyFrame:
"""
Validate that all diagnosis dates occur before or on discharge date.
Returns: LazyFrame with rows that violate this rule (diagnosis_date > discharge_date)
"""
invalid_rows = self.diagnoses.join(
self.invoices.select(["invoice_id", "discharge_date"]),
on="invoice_id",
how="inner"
).filter(
pl.col("diagnosis_date") > pl.col("discharge_date")
)
return invalid_rows
Ability to filter only specifc schema for filtering collection.
- Lingua principale
- Python
- Stelle
- 618
- Fork
- 21
- Merge medio
- 15h 53m
- PR unite (30g)
- 8
Preparare l'ambiente
Non abbiamo ancora controllato i file di configurazione di questo progetto. Parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di Quantco/dataframely
-
Expose validation errorsAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
Quantco/dataframely#402 · 3 commenti ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 62/100
Quantco/dataframely#357 · 1 reazione ·
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
Quantco/dataframely#309 · 4 commenti · 2 reazioni ·
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 45/100
Quantco/dataframely#295 · 3 commenti · 1 reazione ·
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 45/100
Quantco/dataframely#273 · 5 commenti · 1 reazione ·
Tutte le issue di Quantco/dataframely
Issue simili
-
correction metadata
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
acl-org/acl-anthology#10104 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
bug status/needs-triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
prowler-cloud/prowler#12885 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Bug in GaussianTailProbabilityCalibrator: running_statistics=False still uses a windowed varianceApertabug good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
selimfirat/pysad#107 ·
I maintainer di solito rispondono entro 1 giorno
-
bug ci-failure high priority
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
vllm-project/vllm-omni#8194 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
I maintainer di solito rispondono entro 1 giorno