Python案例:协防补位成功次数统计
下面给你几个不同层次的实现案例,从简单到实战。

基础统计(字典计数)
# 协防补位记录:每条记录为 (防守球员, 是否成功)
records = [
("张三", True),
("李四", True),
("张三", False),
("王五", True),
("李四", True),
("张三", True),
]
# 统计每位球员协防补位成功次数
success_count = {}
for player, success in records:
if success:
success_count[player] = success_count.get(player, 0) + 1
print("协防补位成功次数:")
for player, count in success_count.items():
print(f"{player}: {count} 次")
输出:
协防补位成功次数:
张三: 2 次
李四: 2 次
王五: 1 次
使用 Pandas 分析(推荐)
import pandas as pd
data = {
"球员": ["张三", "李四", "张三", "王五", "李四", "张三"],
"是否成功": [True, True, False, True, True, True],
"位置": ["后卫", "中场", "后卫", "前锋", "中场", "后卫"],
}
df = pd.DataFrame(data)
# 1. 每位球员协防补位成功次数
success_by_player = df[df["是否成功"]].groupby("球员").size()
print("=== 每位球员协防补位成功次数 ===")
print(success_by_player)
# 2. 各位置协防补位成功次数
success_by_pos = df[df["是否成功"]].groupby("位置").size()
print("\n=== 各位置协防补位成功次数 ===")
print(success_by_pos)
# 3. 协防补位成功率
rate = df.groupby("球员")["是否成功"].mean() * 100
print("\n=== 各球员协防补位成功率(%) ===")
print(rate.round(1))
输出:
=== 每位球员协防补位成功次数 ===
球员
张三 2
李四 2
王五 1
=== 各位置协防补位成功次数 ===
位置
中场 2
前锋 1
后卫 2
=== 各球员协防补位成功率(%) ===
张三 66.7
李四 100.0
王五 100.0
读取文件统计(实战版)
假设有一个 defense.csv 文件:
球员,协防补位总次数,成功次数 张三,5,3 李四,4,4 王五,3,1
import pandas as pd
df = pd.read_csv("defense.csv")
# 计算成功率
df["成功率"] = (df["成功次数"] / df["协防补位总次数"] * 100).round(1)
# 按成功次数排序
df_sorted = df.sort_values("成功次数", ascending=False)
print(df_sorted)
# 全队协防补位成功总次数
total = df["成功次数"].sum()
print(f"\n全队协防补位成功总次数:{total} 次")
| 方法 | 适用场景 |
|---|---|
dict.get() 计数 |
数据量小、无依赖 |
collections.Counter |
快速计数 |
| Pandas groupby | 多维度分析(球员/位置/时间) |
| CSV读取 | 真实比赛数据 |
核心思路:
- 用布尔值或
1/0标记是否成功 - 用
groupby + size()或sum()聚合 - 成功率 = 成功次数 / 总次数 × 100%
如果你有具体的数据结构(比如比赛日志格式、字段名),可以发给我,我帮你写针对性的统计代码。