Feature request - Support for filtering specific schemas for collection filter
@borchero 已经在做这个了。
开始于 2026年2月23日。
评估
这个 Issue 还没有评估数据。
描述
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.
- 主要语言
- Python
- 星标
- 618
- 派生
- 21
- 平均合并
- 14 小时 34 分钟
- 30 天内合并 PR
- 7
贡献指南
这个仓库没有索引到贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
Quantco/dataframely 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 76/100
Quantco/dataframely#402 · 3 条评论 ·
-
难度 3/5 1-2 天 新手友好度 62/100
Quantco/dataframely#357 · 1 个 reaction ·
-
难度 5/5 一周以上 新手友好度 25/100
Quantco/dataframely#309 · 4 条评论 · 2 个 reaction ·
-
难度 5/5 一周以上 新手友好度 45/100
Quantco/dataframely#295 · 3 条评论 · 1 个 reaction ·
-
难度 5/5 一周以上 新手友好度 45/100
Quantco/dataframely#273 · 5 条评论 · 1 个 reaction ·
查看 Quantco/dataframely 的全部 Issue
相似的 Issue
-
bug
难度 2/5 1-3 小时 新手友好度 75/100
stephrobert/dsoxlab#238 ·
-
难度 2/5 1-3 小时 新手友好度 75/100
-
难度 2/5 1-3 小时 新手友好度 75/100
sublimehq/package_control#1780 ·
-
难度 2/5 1-3 小时 新手友好度 65/100
-
难度 2/5 1-3 小时 新手友好度 70/100
nwg-piotr/nwg-displays#145 ·