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

如何用Python的Pandas/Numpy评估含点球的足球比赛结果并判定胜者

解决方案

1. 正则提取比分信息

用正则表达式一次性提取常规比分和点球比分的数字,避免拆分符号时的冲突。正则模式可直接捕获点球数和常规比分:

import pandas as pd

# 示例DataFrame
df = pd.DataFrame({
    'match_id': [1, 2, 3, 4],
    'score': ['2-1', '1-1(4)', '(5)1-1', '(5)1-1(4)']
})

# 正则提取:分组1=主队点球数,分组2=主队常规比分,分组3=客队常规比分,分组4=客队点球数
pattern = r'^(?:\((\d+)\))?(\d+)-(\d+)(?:\((\d+)\))?$'
score_data = df['score'].str.extract(pattern).astype(float)
score_data.columns = ['pen_home', 'reg_home', 'reg_away', 'pen_away']

# 合并回原DataFrame
df = pd.concat([df, score_data], axis=1)

2. 判定比赛胜者

写一个简单的逻辑函数,先看常规比分,打平再看点球结果:

def determine_winner(row):
    # 常规比分分胜负
    if row['reg_home'] > row['reg_away']:
        return 'home'
    elif row['reg_home'] < row['reg_away']:
        return 'away'
    # 常规打平且有点球数据
    elif pd.notna(row['pen_home']) and pd.notna(row['pen_away']):
        return 'home' if row['pen_home'] > row['pen_away'] else 'away'
    # 常规打平但无点球(如友谊赛平局)
    else:
        return 'draw'

# 应用函数生成胜者列
df['winner'] = df.apply(determine_winner, axis=1)

运行后示例输出:

match_idscorepen_homereg_homereg_awaypen_awaywinner
12-1NaN2.01.0NaNhome
21-1(4)NaN1.01.04.0away
3(5)1-15.01.01.0NaNhome
4(5)1-1(4)5.01.01.04.0home

关键细节说明

  • 正则里的(?:...)是非捕获分组,只匹配格式不提取内容,确保我们只拿到需要的数字
  • 用astype(float)转换时,空值自动转为NaN,方便后续判断是否存在点球
  • 逻辑函数可根据赛事规则调整(比如部分赛事常规打平直接算平局,无需点球判定)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 12:40:54