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

Python DataFrame中棒球投手投球局数计算函数修正需求

修正棒球投手投球局数计算函数

你的函数存在三个核心问题,导致计算结果错误:

  1. 单场局数逻辑错误:直接用最大局数加出局数/3,会多算1局。比如投完3局后在第4局拿2个出局,正确局数是3.2,但原函数会算成4+2/3=4.666。
  2. 浮点数精度陷阱:用innings_pitched %1 == 1/3判断小数部分,会因为浮点数精度误差导致判断失效。
  3. 条件重复:两个elif条件完全一致,第二个条件永远不会被触发。

修正后的函数

def calc_innings_pitched(pitcher_df):
    total_outs = 0
    # 按比赛日期分组处理
    for _, game_df in pitcher_df.groupby('Date'):
        max_inning = game_df['Inning'].max()
        last_outs = game_df.iloc[-1]['Outs']
        
        if last_outs == 3:
            # 最后一局投满3个出局,按完整局数计算出局数
            game_outs = max_inning * 3
        else:
            # 最后一局未投满,完整局数为最大局数-1,加上该局实际出局数
            game_outs = (max_inning - 1) * 3 + last_outs
        
        total_outs += game_outs
    
    # 转换为标准投球局数格式
    full_innings = total_outs // 3
    remaining_outs = total_outs % 3
    
    if remaining_outs == 1:
        return full_innings + 0.1
    elif remaining_outs == 2:
        return full_innings + 0.2
    else:
        return float(full_innings)

函数说明

  1. 按比赛分组统计出局数:
    • 若投手在某场比赛的最后一局投满3个出局,该局算完整局,出局数为最大局数×3。
    • 若最后一局未投满,完整局数为最大局数-1,加上该局实际拿到的出局数。
  2. 总出局数转换为投球局数:
    • 总出局数除以3得到完整局数,余数对应小数部分:1个出局→0.1,2个出局→0.2,无余数则为整数局数。

针对你的示例数据:

  • 6/6比赛出局数为13,转换为4.1局;6/7比赛出局数为8,转换为2.2局。
  • 总出局数21,21÷3=7,最终返回7.0,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 23:30:55