我正在尝试在 Polars 中执行
join_asof
,它只向后看时间,忽略同一行上的匹配。具体来说,我希望它找到 Team
和 Field
完全匹配的最后一行,但前提是 Wk
值小于当前行的 Wk
。
目标是获得最近比赛的最后
GeneralLambda
,无论是“客场”还是“主场”,不包括当前比赛。我认为最好的方法是使用 join_asof
,但我正在努力解决如何使其只考虑过去的行并在 Team
和 Field
上进行匹配。
这里有一个 DataFrame 示例来说明:
季节 | 周 | 团队 | 田野 | 通用Lambda |
---|---|---|---|---|
2024 | 25 | A队 | 离开 | 2.123456 |
2024 | 25 | B队 | 首页 | 1.234567 |
2024 | 25 | C队 | 离开 | 0.987654 |
2024 | 25 | D队 | 首页 | 1.345678 |
2024 | 25 | E队 | 离开 | 1.456789 |
2024 | 26 | A队 | 首页 | 1.234567 |
2024 | 26 | B队 | 离开 | 1.345678 |
2024 | 26 | C队 | 首页 | 0.876543 |
2024 | 26 | D队 | 离开 | 1.456789 |
2024 | 26 | E队 | 首页 | 1.567890 |
2024 | 27 | A队 | 离开 | 2.278759 |
2024 | 27 | B队 | 离开 | 1.103829 |
2024 | 27 | C队 | 首页 | 0.992563 |
2024 | 27 | D队 | 首页 | 1.089324 |
2024 | 27 | E队 | 首页 | 1.074221 |
对于每一行,我需要将其与最后一个匹配行连接起来,其中:
Team
是一样的,Field
是一样的,Wk
小于当前行的 Wk。我希望 DataFrame 看起来像这样:
季节 | 周 | 团队 | 田野 | 通用Lambda | Prev_GeneralLambda |
---|---|---|---|---|---|
2024 | 25 | A队 | 离开 | 2.123456 | 最后的价值 |
2024 | 25 | B队 | 首页 | 1.234567 | BLastHomeValue |
2024 | 25 | C队 | 离开 | 0.987654 | CLastAwayValue |
2024 | 25 | D队 | 首页 | 1.345678 | DLastHomeValue |
2024 | 25 | E队 | 离开 | 1.456789 | ELastAwayValue |
2024 | 26 | A队 | 首页 | 1.234567 | 最后的房屋价值 |
2024 | 26 | B队 | 离开 | 1.345678 | BLastAwayValue |
2024 | 26 | C队 | 首页 | 0.876543 | CLastHomeValue |
2024 | 26 | D队 | 离开 | 1.456789 | DLastAwayValue |
2024 | 26 | E队 | 首页 | 1.567890 | ELastHomeValue |
2024 | 27 | A队 | 离开 | 2.278759 | 2.123456 |
2024 | 27 | B队 | 离开 | 1.103829 | 1.345678 |
2024 | 27 | C队 | 首页 | 0.992563 | 0.876543 |
2024 | 27 | D队 | 首页 | 1.089324 | 1.345678 |
2024 | 27 | E队 | 首页 | 1.074221 | 1.567890 |
Polars 有办法做到这一点吗?
(
df
.sort("Wk")
.with_columns(
pl.col("GeneralLambda").shift(1).over("Team","Field")
)
)
shape: (15, 5)
┌────────┬─────┬───────┬───────┬───────────────┐
│ Season ┆ Wk ┆ Team ┆ Field ┆ GeneralLambda │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ str ┆ str ┆ f64 │
╞════════╪═════╪═══════╪═══════╪═══════════════╡
│ 2024 ┆ 25 ┆ TeamA ┆ Away ┆ null │
│ 2024 ┆ 25 ┆ TeamB ┆ Home ┆ null │
│ 2024 ┆ 25 ┆ TeamC ┆ Away ┆ null │
│ 2024 ┆ 25 ┆ TeamD ┆ Home ┆ null │
│ 2024 ┆ 25 ┆ TeamE ┆ Away ┆ null │
│ … ┆ … ┆ … ┆ … ┆ … │
│ 2024 ┆ 27 ┆ TeamA ┆ Away ┆ 2.123456 │
│ 2024 ┆ 27 ┆ TeamB ┆ Away ┆ 1.345678 │
│ 2024 ┆ 27 ┆ TeamC ┆ Home ┆ 0.876543 │
│ 2024 ┆ 27 ┆ TeamD ┆ Home ┆ 1.345678 │
│ 2024 ┆ 27 ┆ TeamE ┆ Home ┆ 1.56789 │
└────────┴─────┴───────┴───────┴───────────────┘