You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

篮球球队月度得分与失分均值计算代码异常排查

代码问题排查与修正

问题核心

你当前输出原始数据集而非统计结果,主要是代码中数据匹配逻辑错误、缺少返回语句,以及统计方式存在偏差导致的,以下分R和Python代码逐一说明:


R代码问题及修正

现存问题

  1. 数据错位匹配:直接用monthly_averages_a$AORTG给monthly_averages赋值,完全依赖两个数据集的行顺序一致,但分组后的球队顺序不一定相同,会导致球队的主客场数据对应错误。
  2. 缺少球队名称统一:仅用home_team作为分组键,合并后没有将客场球队名称与主场统一,无法形成完整的球队列表。
  3. 简单平均未加权:直接取主客场均值的平均,没有考虑球队主客场的比赛场次差异,若某队主场打了5场、客场打了3场,简单平均会拉低结果准确性。

修正后的代码

library(dplyr)

# 转换数据格式:将每场比赛拆分为两条记录(主队一条、客队一条)
team_stats <- ott_10 %>%
  pivot_longer(
    cols = c(home_team, away_team),
    names_to = "home_away",
    values_to = "Team"
  ) %>%
  mutate(
    Scored = ifelse(home_away == "home_team", home_score, away_score),
    Allowed = ifelse(home_away == "home_team", away_score, home_score)
  ) %>%
  select(Team, Scored, Allowed)

# 计算每个球队的总得分、总失分、总场次,再求均值
monthly_averages <- team_stats %>%
  group_by(Team) %>%
  summarize(
    Average_Scored = mean(Scored),
    Average_Allowed = mean(Allowed),
    Net_RTG = Average_Scored - Average_Allowed
  ) %>%
  ungroup()

# 查看目标球队结果
filter(monthly_averages, Team == "Dinamo Basket Sassari")

Python代码问题及修正

现存问题

  1. 函数无返回值:你的avg_scored_allowed函数最后没有return output语句,调用函数时不会返回统计结果,导致你看到的是原始数据集。
  2. 索引对齐风险:home_score_avg + away_score_avg依赖索引(球队名)完全对齐,若有球队只打了主场或客场,会产生NaN值;且简单平均未考虑场次权重。
  3. 缺少差值计算:没有添加得分与失分的差值列。

修正后的代码

import pandas as pd

def avg_scored_allowed(df):
    # 转换数据格式:拆分主客场记录
    home_records = df.rename(columns={
        "home_team": "Team",
        "home_score": "Scored",
        "away_score": "Allowed"
    })[["Team", "Scored", "Allowed"]]
    
    away_records = df.rename(columns={
        "away_team": "Team",
        "away_score": "Scored",
        "home_score": "Allowed"
    })[["Team", "Scored", "Allowed"]]
    
    # 合并所有记录
    all_records = pd.concat([home_records, away_records], ignore_index=True)
    
    # 按球队分组计算均值与差值
    monthly_averages = all_records.groupby("Team").agg(
        Average_Scored=("Scored", "mean"),
        Average_Allowed=("Allowed", "mean")
    ).reset_index()
    
    monthly_averages["Net_RTG"] = monthly_averages["Average_Scored"] - monthly_averages["Average_Allowed"]
    
    return monthly_averages

# 调用函数并查看目标球队
result = avg_scored_allowed(ott_10)
print(result[result["Team"] == "Dinamo Basket Sassari"])

关键说明

修正后的代码采用拆分每条比赛记录为球队独立条目的方式,确保主客场数据都被正确统计,同时直接计算所有场次的均值,比简单平均主客场均值更准确,能匹配你期望的Dinamo Basket Sassari平均得分82.3、失分84.0、差值-1.7的结果。

内容的提问来源于stack exchange,提问作者Cecic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 00:27:35