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

使用UDF计算行差值:实现板球任意两个回合的得分差计算

板球比赛回合得分差值计算实现方案

需求梳理

  • 支持计算连续两个回合的得分差值
  • 支持输入任意两个回合编号,按升序计算两个回合之间的累计得分差值,输入参数顺序不影响结果(例如run_calc(6,3)和run_calc(3,6)输出一致)

完整实现代码

1. 依赖导入与测试数据构造

import pandas as pd

# 构造测试数据集
data = {'Overs' : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],  
        'Runs' : [10, 5, 9, 5, 11, 6, 13, 9, 2, 10]}  
df = pd.DataFrame(data)
# 预计算每回合结束后的累计得分,简化后续差值计算逻辑
df['Total Runs'] = df['Runs'].cumsum()

2. 连续回合得分差值计算

直接调用pandas内置方法即可快速得到相邻回合的得分差值:

# 计算逻辑:后一回合得分 - 前一回合得分,第1回合无前序对应值为NaN
df['Consecutive Run Diff'] = df['Runs'].diff()

3. 自定义UDF实现任意回合差值计算

def run_calc(over1, over2):
    # 自动按升序对齐起止回合,适配参数任意顺序输入的场景
    start_over = min(over1, over2)
    end_over = max(over1, over2)
    
    # 边界校验,避免输入无效回合编号报错
    if start_over < 1 or end_over > df['Overs'].max():
        return "输入的回合编号超出有效范围"
    
    # 计算起始回合之前的累计得分:第1回合前累计得分为0
    pre_total = 0 if start_over == 1 else df.loc[df['Overs'] == start_over - 1, 'Total Runs'].iloc[0]
    # 获取结束回合的累计得分
    end_total = df.loc[df['Overs'] == end_over, 'Total Runs'].iloc[0]
    
    # 返回两个回合之间的累计得分差值
    return end_total - pre_total

4. 调用测试示例

print(run_calc(6,3)) # 输出31,对应第3到第6回合的累计得分
print(run_calc(2,5)) # 输出30,对应第2到第5回合的累计得分

如果需要批量计算多组回合对的差值,可以将该函数通过apply方法应用到存储回合对的DataFrame列中,实现批量处理。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:15:03