python案例认为上半场是否有进球产生?

wen python案例 1

判断上半场是否有进球的Python案例

下面我用一个完整的案例来演示如何用Python判断足球比赛上半场是否有进球。

python案例认为上半场是否有进球产生?

案例背景

假设我们有一批足球比赛的数据,包含每场比赛的进球时间,需要统计上半场(0-45分钟)是否有进球产生。

完整代码示例

import pandas as pd
# 模拟比赛数据:每场比赛的进球时间(分钟)
matches_data = {
    "match_id": ["M001", "M002", "M003", "M004", "M005", "M006"],
    "goal_minutes": [
        [12, 34, 67],      # M001: 上半场有进球(12,34)
        [55, 78],          # M002: 上半场无进球
        [45],              # M003: 45分钟属于上半场(含补时通常算上半场)
        [90],              # M004: 上半场无进球
        [3, 88],           # M005: 上半场有进球
        [],                # M006: 无进球
    ]
}
df = pd.DataFrame(matches_data)
# 方法一:判断上半场是否有进球
def has_first_half_goal(goal_minutes, halftime=45):
    """判断上半场(<=45分钟)是否有进球"""
    return any(minute <= halftime for minute in goal_minutes)
df["上半场是否有进球"] = df["goal_minutes"].apply(has_first_half_goal)
# 方法二:统计上半场进球数
def count_first_half_goals(goal_minutes, halftime=45):
    return sum(1 for m in goal_minutes if m <= halftime)
df["上半场进球数"] = df["goal_minutes"].apply(count_first_half_goals)
print(df)
print("\n上半场有进球的比赛占比: %.2f%%" 
      % (df["上半场是否有进球"].mean() * 100))

输出结果

  match_id goal_minutes  上半场是否有进球  上半场进球数
0     M001   [12, 34, 67]        True         2
1     M002       [55, 78]       False         0
2     M003           [45]        True         1
3     M004           [90]       False         0
4     M005        [3, 88]        True         1
5     M006            []       False         0
上半场有进球的比赛占比: 50.00%

关键点说明

1️⃣ 上半场的时间范围

  • 常规:0 < minute <= 45
  • 需注意伤停补时(如45+2分钟),若数据中标记为 45+2,需要特殊处理:
def parse_minute(m):
    """处理 '45+2' 这类补时格式"""
    if isinstance(m, str) and '+' in m:
        base, extra = m.split('+')
        return int(base) + int(extra)
    return int(m)

2️⃣ 常见统计场景

场景 判断条件
上半场是否有进球 any(m <= 45)
上半场进球数 sum(m <= 45)
半场大小球(如>0.5球) count > 0
半场大1.5球 count >= 2

3️⃣ 用Pandas的向量化写法(更高效)

# 展开所有进球,生成 (match_id, minute) 的明细表
detail = df.explode("goal_minutes").dropna(subset=["goal_minutes"])
detail["goal_minutes"] = detail["goal_minutes"].astype(int)
# 统计每场上半场进球数
first_half = (detail[detail["goal_minutes"] <= 45]
              .groupby("match_id")
              .size()
              .rename("上半场进球数"))
result = df.set_index("match_id").join(first_half).fillna({"上半场进球数": 0})
result["上半场有进球"] = result["上半场进球数"] > 0
print(result)

判断上半场是否有进球的核心逻辑非常简单:

  • 取出45分钟(含)之前的进球 → 用 any() 判断是否为空
  • 若数据含补时信息,需先做时间解析
  • 用Pandas的 explode + groupby 可以优雅地处理批量数据

如果你有具体的比赛数据格式(CSV 或 API 返回的 JSON),我可以帮你调整成对应的代码版本 🙂

上一篇python案例认为这场零封是否归功于防线?

下一篇当前分类已是最新一篇

抱歉,评论功能暂时关闭!

友情链接攻略窝 · 礼包窝 · 配置窝 · 换算窝 · 算法窝 · 查文窝 · 手册窝 · 问答窝 · 全文搜 · 手册库
相关站点礼包窝 · 查文窝