python案例统计脚后跟传球成功几次?

wen python案例 1

Python案例:统计脚后跟传球成功次数

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

python案例统计脚后跟传球成功几次?

场景说明

假设我们要分析一场比赛中的传球数据,需要:

  • 找出所有脚后跟传球
  • 判断传球是否成功(队友接到球)
  • 统计成功次数

基础版本

# 传球数据:[传球者, 接球者, 传球方式, 是否成功, 比赛时间]
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 格式),可以告诉我数据字段,我帮你写对应的解析代码 👍

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