本文目录导读:

下面给你一个 Python 统计头球争顶成功率 的完整案例,包含:
- 数据模拟(模拟球员争顶数据)
- 统计逻辑(成功 / 总争顶)
- 输出结果(按球员、按球队)
- 可视化(可选)
数据模拟
假设你有如下数据(通常来自比赛事件流):
# 每条记录:球员, 球队, 是否成功(1=成功, 0=失败)
data = [
("哈兰德", "曼城", 1),
("哈兰德", "曼城", 1),
("哈兰德", "曼城", 0),
("哈兰德", "曼城", 1),
("哈兰德", "曼城", 0),
("姆巴佩", "皇马", 1),
("姆巴佩", "皇马", 0),
("姆巴佩", "皇马", 0),
("姆巴佩", "皇马", 1),
("凯恩", "拜仁", 1),
("凯恩", "拜仁", 1),
("凯恩", "拜仁", 0),
("凯恩", "拜仁", 1),
("凯恩", "拜仁", 1),
("凯恩", "拜仁", 0),
("C罗", "利雅得胜利", 1),
("C罗", "利雅得胜利", 0),
("C罗", "利雅得胜利", 1),
("C罗", "利雅得胜利", 1),
]
使用 Pandas 统计
import pandas as pd
df = pd.DataFrame(data, columns=["球员", "球队", "成功"])
# 按球员统计
player_stats = df.groupby("球员").agg(
总争顶=("成功", "count"),
成功次数=("成功", "sum")
).reset_index()
player_stats["成功率(%)"] = (player_stats["成功次数"] / player_stats["总争顶"] * 100).round(2)
print("按球员统计:")
print(player_stats.sort_values("成功率(%)", ascending=False))
输出示例:
球员 总争顶 成功次数 成功率(%)
0 C罗 4 3 75.0
1 哈兰德 5 3 60.0
2 凯恩 6 4 66.67
3 姆巴佩 4 2 50.0
按球队汇总
team_stats = df.groupby("球队").agg(
总争顶=("成功", "count"),
成功次数=("成功", "sum")
).reset_index()
team_stats["成功率(%)"] = (team_stats["成功次数"] / team_stats["总争顶"] * 100).round(2)
print("\n按球队统计:")
print(team_stats)
只用纯 Python(不用 Pandas)
from collections import defaultdict
player_data = defaultdict(lambda: [0, 0]) # [成功, 总]
for name, team, success in data:
player_data[name][0] += success
player_data[name][1] += 1
print("球员头球争顶成功率:")
print(f"{'球员':<10}{'成功':<6}{'总争顶':<8}{'成功率%':<10}")
for name, (succ, total) in sorted(player_data.items(), key=lambda x: x[1][0]/x[1][1] if x[1][1] else 0, reverse=True):
rate = succ / total * 100 if total else 0
print(f"{name:<10}{succ:<6}{total:<8}{rate:<10.2f}")
可视化(Matplotlib 柱状图)
import matplotlib.pyplot as plt
# 使用上面的 player_stats
plt.figure(figsize=(8, 5))
plt.bar(player_stats["球员"], player_stats["成功率(%)"], color="skyblue")
plt.ylabel("成功率 (%)")"球员头球争顶成功率")
plt.ylim(0, 100)
for i, v in enumerate(player_stats["成功率(%)"]):
plt.text(i, v + 1, str(v), ha="center")
plt.show()
实际场景扩展
如果数据来自 CSV 文件:
df = pd.read_csv("head_duel_data.csv")
# 假设列名为: player, team, success (0/1)
如果数据有比赛 ID,可以按比赛筛选:
df[df["match_id"] == 2024001]
总结关键点
| 统计项 | 方法 |
|---|---|
| 总争顶次数 | count() |
| 成功次数 | sum() |
| 成功率 | 成功 / 总 × 100 |
| 按球员分组 | groupby("球员") |
| 按球队汇总 | groupby("球队") |
| 可视化 | matplotlib 柱状图 |
如果你有实际数据(CSV/Excel/JSON),可以把文件结构发我,我帮你写出完整读取 + 统计 + 导出的脚本。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播