如何根据Polars中的另一列进行条件选择累加?

问题描述 投票:0回答:1

我有一个DataFrame,我想获取该集群中球队的最新进球来应用ewm_mean(),即创建一个

EWM_COLUMN
,如下例所示:

原表

季节 首页 离开 首页目标 客场进球 集群_home Cluster_away 集群_对_密钥
2024 27.0 A队 F队 3 2 4 1 1_4
2024 27.0 B队 G队 1 3 2 2 2_2
2024 27.0 C队 团队H 1 0 5 3 3_5
2024 27.0 D队 团队我 0 1 3 1 1_3
2024 27.0 E队 团队J 3 0 3 4 3_4

查看

teamE
,我想考虑 E 队的主场进球、
teamD
的主场进球以及
teamC
的客场进球。我创建了 Cluster_pair_key_Organized 列,因为我认为它可以在某种程度上有所帮助。

新表

季节 首页 离开 首页目标 客场进球 集群_home Cluster_away 集群_对_密钥 EWM_COLUMN
2024 27.0 A队 F队 3 2 4 1 1_4 3 * 0.8 + ...
2024 27.0 B队 G队 1 3 2 2 2_2 1 * 0.8 + ...
2024 27.0 C队 团队H 1 0 5 3 3_5 0 * 0.8 + ...
2024 27.0 D队 团队我 0 1 3 1 1_3 0 * 0.8 + 0.2 * 0 + ...
2024 27.0 E队 团队J 3 0 3 4 3_4 3 * 0.8 + 0.2 *(0 * 0.8 + 0.2 * 0)
python group-by python-polars
1个回答
0
投票
df_ewm = (
    df
    .select(
        Team=pl.concat_list("Home","Away"),
        Goals=pl.concat_list("HomeGoals","AwayGoals"),
        Cluster=pl.concat_list("Cluster_home","Cluster_away"),
    )
    .explode(pl.all())
    .select(
        pl.col.Team,
        EWM_COLUMN = pl.col.Goals.ewm_mean(alpha=0.8, adjust=False, min_periods=0).over("Cluster")
    )
)

df.join(df_ewm, left_on="Home", right_on="Team")
shape: (5, 9)
┌────────┬─────┬───────┬───────┬───┬───────────┬──────────────┬──────────────┬────────────┐
│ Season ┆ Wk  ┆ Home  ┆ Away  ┆ … ┆ AwayGoals ┆ Cluster_home ┆ Cluster_away ┆ EWM_COLUMN │
│ ---    ┆ --- ┆ ---   ┆ ---   ┆   ┆ ---       ┆ ---          ┆ ---          ┆ ---        │
│ i64    ┆ i64 ┆ str   ┆ str   ┆   ┆ i64       ┆ i64          ┆ i64          ┆ f64        │
╞════════╪═════╪═══════╪═══════╪═══╪═══════════╪══════════════╪══════════════╪════════════╡
│ 2024   ┆ 27  ┆ teamA ┆ teamF ┆ … ┆ 2         ┆ 4            ┆ 1            ┆ 3.0        │
│ 2024   ┆ 27  ┆ teamB ┆ teamG ┆ … ┆ 3         ┆ 2            ┆ 2            ┆ 1.0        │
│ 2024   ┆ 27  ┆ teamC ┆ teamH ┆ … ┆ 0         ┆ 5            ┆ 3            ┆ 1.0        │
│ 2024   ┆ 27  ┆ teamD ┆ teamI ┆ … ┆ 1         ┆ 3            ┆ 1            ┆ 0.0        │
│ 2024   ┆ 27  ┆ teamE ┆ teamJ ┆ … ┆ 0         ┆ 3            ┆ 4            ┆ 2.4        │
└────────┴─────┴───────┴───────┴───┴───────────┴──────────────┴──────────────┴────────────┘
© www.soinside.com 2019 - 2024. All rights reserved.