Feature request - Support for filtering specific schemas for collection filter
@borchero ya está trabajando en esto.
Desde el 23/2/2026.
Evaluación
Este issue todavía no se ha evaluado.
Descripción
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.
- Lenguaje dominante
- Python
- Estrellas
- 618
- Forks
- 21
- Merge medio
- 14 h 34 min
- PR fusionados (30 d)
- 7
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de Quantco/dataframely
-
Expose validation errors Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Quantco/dataframely#402 · 3 comentarios ·
-
Adding `sorted` in `dy.Column` Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 62/100
Quantco/dataframely#357 · 1 reacción ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
Quantco/dataframely#309 · 4 comentarios · 2 reacciones ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 45/100
Quantco/dataframely#295 · 3 comentarios · 1 reacción ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 45/100
Quantco/dataframely#273 · 5 comentarios · 1 reacción ·
Todos los issues de Quantco/dataframely
Issues similares
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
stephrobert/dsoxlab#238 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
sublimehq/package_control#1780 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
nwg-piotr/nwg-displays#145 ·