python案例统计反击次数哪队更高效?

wen python案例 2

Python案例:统计反击次数,哪队更高效?

下面我用一个完整的Python案例来演示如何统计足球比赛中的反击次数,并对比两队谁的反击更高效。

python案例统计反击次数哪队更高效?

问题定义

我们要分析一场比赛中两队的反击数据:

  • 统计每队的反击次数
  • 统计每次反击的结果(进球 / 射门 / 失误)
  • 计算反击效率 = 进球数 / 反击次数

数据准备

import pandas as pd
# 模拟一场比赛的进攻事件数据
data = [
    # 球队, 进攻类型, 反击结果, 用时(秒)
    ("A队", "反击", "进球", 8),
    ("A队", "反击", "射门被扑", 10),
    ("A队", "反击", "失误", 6),
    ("A队", "反击", "进球", 9),
    ("A队", "反击", "射门偏出", 12),
    ("A队", "阵地战", "进球", 25),
    ("B队", "反击", "进球", 7),
    ("B队", "反击", "进球", 11),
    ("B队", "反击", "射门被扑", 9),
    ("B队", "反击", "失误", 5),
    ("B队", "反击", "进球", 10),
    ("B队", "反击", "射门偏出", 8),
    ("B队", "阵地战", "射门偏出", 22),
]
df = pd.DataFrame(data, columns=["球队", "进攻类型", "结果", "用时"])
print(df)

统计反击次数与效率

# 只筛选反击事件
counter = df[df["进攻类型"] == "反击"]
# 统计每队反击次数
counts = counter.groupby("球队").size().rename("反击次数")
# 统计每队反击进球数
goals = counter[counter["结果"] == "进球"].groupby("球队").size().rename("反击进球")
# 合并
result = pd.concat([counts, goals], axis=1).fillna(0)
result["反击成功率"] = (result["反击进球"] / result["反击次数"] * 100).round(1)
# 平均反击用时
avg_time = counter.groupby("球队")["用时"].mean().round(1).rename("平均用时(秒)")
result = pd.concat([result, avg_time], axis=1)
print(result)

输出结果:

     反击次数  反击进球  反击成功率  平均用时(秒)
A队       5     2.0      40.0        9.0
B队       6     3.0      50.0        8.3

结论分析

指标 A队 B队
反击次数 5 6 B队发起反击更多
反击进球 2 3 B队进球更多
反击成功率 40% 50% B队更高
平均用时 0s 3s B队反击更快

✅ 最终判定:B队反击更高效

理由:

  1. 次数更多:6次 vs 5次,说明B队更善于制造反击机会
  2. 成功率更高:50% vs 40%,把握机会能力更强
  3. 耗时更短:平均8.3秒完成一次反击,进攻更犀利

进阶:反击效率综合评分

如果要给一个"效率分",可以加权计算:

# 综合评分:成功率权重0.6,速度权重0.4(速度越快分越高)
max_time = result["平均用时(秒)"].max()
result["速度得分"] = (max_time / result["平均用时(秒)"] * 100).round(1)
result["综合效率分"] = (
    result["反击成功率"] * 0.6 + result["速度得分"] * 0.4
).round(1)
print(result[["反击成功率", "速度得分", "综合效率分"]])

这样就能得到一个更直观的对比,B队依然胜出。


核心思路总结:统计反击不能只看次数,要结合"次数 + 转化率 + 速度"三个维度,用 groupby 分组聚合是最简洁的Python实现方式。

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