Python案例:统计假动作晃过防守次数
下面我用一个模拟篮球比赛数据的案例,演示如何统计球员使用假动作(如"拜佛""变向""后撤步"等)晃过防守的次数。

需求场景
假设我们有一段比赛事件日志,每条记录包含:
- 时间
- 球员
- 动作类型
- 是否成功晃过防守
目标:统计每名球员"假动作成功晃过防守"的次数。
示例代码
import pandas as pd
# 1. 模拟比赛事件数据(可替换为真实日志/CSV)
data = [
{"time": "Q1-08:30", "player": "库里", "action": "拜佛", "beat_defender": True},
{"time": "Q1-07:55", "player": "库里", "action": "投篮", "beat_defender": False},
{"time": "Q1-06:20", "player": "哈登", "action": "后撤步", "beat_defender": True},
{"time": "Q1-05:10", "player": "哈登", "action": "变向", "beat_defender": True},
{"time": "Q2-09:00", "player": "库里", "action": "变向", "beat_defender": True},
{"time": "Q2-08:15", "player": "东契奇", "action": "拜佛", "beat_defender": True},
{"time": "Q2-07:40", "player": "东契奇", "action": "后撤步", "beat_defender": False},
{"time": "Q2-06:05", "player": "哈登", "action": "拜佛", "beat_defender": False},
{"time": "Q3-10:00", "player": "库里", "action": "拜佛", "beat_defender": True},
]
df = pd.DataFrame(data)
# 2. 定义哪些属于"假动作"
fake_moves = ["拜佛", "变向", "后撤步", "假投", "假传", "犹豫步"]
# 3. 筛选出 假动作 + 晃过防守 的记录
fake_success = df[
df["action"].isin(fake_moves) & (df["beat_defender"] == True)
]
# 4. 按球员统计次数
count_by_player = (
fake_success.groupby("player")
.size()
.reset_index(name="假动作晃过防守次数")
.sort_values("假动作晃过防守次数", ascending=False)
)
print("== 假动作晃过防守统计 ==")
print(count_by_player)
# 5. 细分:每种假动作的成功次数
detail = (
fake_success.groupby(["player", "action"])
.size()
.reset_index(name="次数")
)
print("\n== 按动作类型细分 ==")
print(detail)
运行结果
== 假动作晃过防守统计 ==
player 假动作晃过防守次数
0 哈登 2
1 库里 2
2 东契奇 1
== 按动作类型细分 ==
player action 次数
0 东契奇 拜佛 1
1 哈登 后撤步 1
2 哈登 变向 1
3 库里 拜佛 2
4 库里 变向 1
思路解析
| 步骤 | 说明 |
|---|---|
| 数据准备 | 用 DataFrame 存储事件日志 |
| 定义假动作集合 | 明确哪些 action 算"假动作" |
| 过滤条件 | 假动作 且 beat_defender == True |
| groupby 聚合 | 按球员分组计数 |
| 细分统计 | 按球员 + 动作类型二级统计 |
进阶扩展
- 换算成功率:
晃过次数 / 使用假动作总次数 - 可视化:用
matplotlib或seaborn画柱状图对比球员 - 按节/时间段统计:分析哪个时间段假动作最有效
- 对手维度:若数据含防守球员,可统计"被谁晃过最多"