Python案例:统计脚后跟传球成功次数
下面我用一个完整的案例来演示如何统计足球比赛中脚后跟传球(backheel pass)的成功次数。

场景说明
假设我们要分析一场比赛中的传球数据,需要:
- 找出所有脚后跟传球
- 判断传球是否成功(队友接到球)
- 统计成功次数
基础版本
# 传球数据:[传球者, 接球者, 传球方式, 是否成功, 比赛时间]
passes = [
["梅西", "苏亚雷斯", "backheel", True, "12'"],
["梅西", "布斯克茨", "short", True, "15'"],
["阿尔巴", "梅西", "backheel", True, "23'"],
["内马尔", "梅西", "backheel", False, "35'"], # 被对手拦截
["苏亚雷斯", "梅西", "backheel", True, "48'"],
["布斯克茨", "皮克", "long", True, "60'"],
["梅西", "阿尔巴", "backheel", True, "72'"],
["拉基蒂奇", "梅西", "backheel", False, "80'"],
]
# 统计脚后跟传球成功次数
backheel_success = 0
backheel_total = 0
for p in passes:
if p[2] == "backheel":
backheel_total += 1
if p[3]: # True 表示成功
backheel_success += 1
print(f"脚后跟传球总次数: {backheel_total}")
print(f"成功次数: {backheel_success}")
print(f"成功率: {backheel_success / backheel_total * 100:.1f}%")
输出:
脚后跟传球总次数: 6
成功次数: 4
成功率: 66.7%
进阶版本(使用 pandas)
如果数据量大,推荐使用 pandas:
import pandas as pd
df = pd.DataFrame(passes, columns=["passer", "receiver", "type", "success", "time"])
# 筛选脚后跟传球
backheels = df[df["type"] == "backheel"]
# 统计
total = len(backheels)
success = backheels["success"].sum()
rate = success / total * 100
print(f"脚后跟传球总次数: {total}")
print(f"成功次数: {success}")
print(f"成功率: {rate:.1f}%")
# 查看是谁传的
print("\n各球员脚后跟传球统计:")
print(backheels.groupby("passer")["success"].agg(["count", "sum"]))
输出:
脚后跟传球总次数: 6
成功次数: 4
成功率: 66.7%
各球员脚后跟传球统计:
count sum
passer
内马尔 1 0
拉基蒂奇 1 0
梅西 3 2
苏亚雷斯 1 1
阿尔巴 1 1
函数封装版(可复用)
def count_backheel_success(passes):
"""
统计脚后跟传球成功次数
:param passes: 传球列表 [[传球者, 接球者, 方式, 是否成功], ...]
:return: dict 统计结果
"""
backheels = [p for p in passes if p[2] == "backheel"]
total = len(backheels)
success = sum(1 for p in backheels if p[3])
return {
"总次数": total,
"成功次数": success,
"成功率": f"{success/total*100:.1f}%" if total else "0%"
}
# 调用
result = count_backheel_success(passes)
print(result) # {'总次数': 6, '成功次数': 4, '成功率': '66.7%'}
关键点总结
| 步骤 | 说明 |
|---|---|
| 遍历数据 | 用 for 循环或 pandas 筛选 |
| 判断条件 | 传球方式 == "backheel"(或用 in ["backheel", "heel"] 兼容) |
| 累加计数 | 满足条件的传球数 +1 |
| 判断成功 | 布尔字段为 True 时成功数 +1 |
如果你有真实的比赛数据(Opta、StatsBomb 格式),可以告诉我数据字段,我帮你写对应的解析代码 👍