如何在Azure Data Factory中按动态条件计算平均值生成新列?
实现动态条件的场均得分计算(对应Google Sheets AVERAGEIFS)
一、Azure Data Flows 窗口转换的正确实现
你之前用窗口转换的思路是对的,只是没搞懂动态引用当前行的语法。按以下步骤操作就能实现需求:
- 添加窗口转换,在「分组依据」里选中
season和team_name(这两个字段用来匹配当前行的赛季和球队) - 在「排序依据」里选
week,设置为升序 - 在「窗口列」新增一列(比如命名为
avg_points_before),输入以下表达式:
这个表达式会自动按当前行的赛季、球队分组,只计算当前周之前所有比赛的得分平均值,完全对应你Google Sheets里的公式逻辑。avg(over( partitionBy(season, team_name), orderBy(week asc), rangeBetween(unboundedPreceding(), currentRow() - 1) ), points)
二、Power Query(M语言)实现方案
如果想用Power Query,不用纠结复杂的M语法,按以下步骤操作:
- 把NFL数据导入Power Query,确保
season、team_name、week、points的字段类型正确 - 按
season和team_name分组,操作选择「所有行」,得到包含分组表的新列 - 对分组后的「所有行」列添加自定义列,粘贴以下M代码:
Table.AddColumn([所有行], "avg_points_before", (row) => let filtered = Table.SelectRows([所有行], each [week] < row[week]), avgScore = if Table.RowCount(filtered) > 0 then List.Average(filtered[points]) else null in avgScore ) - 展开自定义列,就能得到每行对应的场均得分
三、新手友好的替代平台建议
如果觉得Azure的工具上手麻烦,推荐两个低成本、易操作的选项:
- BigQuery:用SQL就能搞定,语法简单直观,免费额度足够处理10年NFL数据。SQL示例:
写完SQL直接保存成视图,后续可以直接对接ML模型。SELECT *, AVG(points) OVER ( PARTITION BY season, team_name ORDER BY week ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING ) AS avg_points_before FROM nfl_game_stats - Pandas+云函数:如果会点Python,用Pandas处理更灵活,配合AWS Lambda或Google Cloud Functions定时运行,成本极低。代码示例:
处理完直接导出到ML平台(比如Google AI Platform或AWS SageMaker)即可。import pandas as pd df = pd.read_csv("nfl_data.csv") # 按赛季、球队分组,按周排序 df = df.sort_values(["season", "team_name", "week"]) # 计算当前行之前的场均得分 df["avg_points_before"] = df.groupby(["season", "team_name"])["points"].transform( lambda x: x.expanding().mean().shift(1) )
内容的提问来源于stack exchange,提问作者JD Dayhuff
相关产品推荐
相关产品推荐

