使用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
相关产品推荐
相关产品推荐

