判断上半场是否有进球的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),我可以帮你调整成对应的代码版本 🙂
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播