Python案例:统计任意球直接得分次数
下面我用一个完整的案例,演示如何统计足球比赛中任意球直接得分的次数。

场景说明
假设我们有一批比赛事件数据,需要统计每个球员通过任意球直接破门(free kick goal)的次数。
基础版(用字典统计)
# 比赛事件数据
events = [
{"player": "梅西", "type": "任意球直接得分"},
{"player": "C罗", "type": "点球得分"},
{"player": "梅西", "type": "任意球直接得分"},
{"player": "贝克汉姆", "type": "任意球直接得分"},
{"player": "C罗", "type": "任意球直接得分"},
{"player": "梅西", "type": "运动战进球"},
{"player": "贝克汉姆", "type": "任意球直接得分"},
{"player": "C罗", "type": "任意球直接得分"},
]
# 统计任意球直接得分
result = {}
for e in events:
if e["type"] == "任意球直接得分":
player = e["player"]
result[player] = result.get(player, 0) + 1
# 按得分从高到低排序输出
for player, count in sorted(result.items(), key=lambda x: -x[1]):
print(f"{player}: {count} 次")
输出:
梅西: 2 次
贝克汉姆: 2 次
C罗: 2 次
进阶版(用 Pandas,适合大量数据)
import pandas as pd
df = pd.DataFrame(events)
# 筛选任意球直接得分,并按球员分组计数
free_kick_goals = (
df[df["type"] == "任意球直接得分"]
.groupby("player")
.size()
.sort_values(ascending=False)
.reset_index(name="任意球直接得分次数")
)
print(free_kick_goals)
输出:
player 任意球直接得分次数
0 梅西 2
1 C罗 2
2 贝克汉姆 2
读取 CSV/Excel 文件统计
实际项目中数据通常来自文件:
import pandas as pd
# 假设数据文件有 player、type 两列
df = pd.read_csv("match_events.csv")
# 关键:用 str.contains 匹配"任意球"相关关键词
mask = df["type"].str.contains("任意球", na=False) & \
df["type"].str.contains("得分|进球", na=False)
stats = df[mask].groupby("player").size().sort_values(ascending=False)
print(stats)
| 步骤 | 说明 |
|---|---|
| 确定统计目标 | "任意球直接得分"这一事件类型 |
| 筛选数据 | 用条件判断或 str.contains 过滤 |
| 分组计数 | 字典 get() 累加,或 Pandas groupby().size() |
| 排序输出 | sorted(..., key=lambda x: -x[1]) 降序 |
拓展:区分"任意球直接得分"和"任意球助攻"
# 如果数据里有更细的分类 types = ["任意球直接得分", "任意球助攻", "任意球射门被扑"] # 用 value_counts 一键统计 print(df[df["type"].isin(types)]["type"].value_counts())
如果你有真实的比赛数据格式(CSV 字段名、事件描述写法),可以发给我,我帮你写出针对性的统计代码。