统计角球数领先方的实用脚本
下面给你一个通用、可直接套用的脚本思路,覆盖 Excel/Python 两种常见场景。

Excel 公式版(适合直播/复盘手动录入)
假设数据表结构:
| A列 | B列 | C列 | D列 |
|---|---|---|---|
| 时间 | 主队角球 | 客队角球 | 领先方 |
D2 公式:
=IF(B2>C2,"主队领先",IF(C2>B2,"客队领先","持平"))
统计全场领先时长(按分钟加权),假设 E 列是"该状态持续分钟数":
主队领先总时长 =SUMIF(D:D,"主队领先",E:E) 客队领先总时长 =SUMIF(D:D,"客队领先",E:E)
Python 脚本版(适合批量处理/爬取数据)
import pandas as pd
def corner_leader(home_corners, away_corners):
"""返回单一时点的角球领先方"""
if home_corners > away_corners:
return "主队领先"
elif away_corners > home_corners:
return "客队领先"
else:
return "持平"
# 示例数据:每分钟角球累计数
data = {
"minute": [10, 20, 30, 40, 50, 60, 70, 80, 90],
"home_corners": [0, 1, 2, 2, 3, 4, 4, 5, 6],
"away_corners": [1, 1, 1, 2, 2, 2, 3, 3, 3],
}
df = pd.DataFrame(data)
# 1. 每个时点谁领先
df["领先方"] = df.apply(
lambda r: corner_leader(r["home_corners"], r["away_corners"]), axis=1
)
# 2. 计算每个状态持续时长(下一分钟 - 当前分钟)
df["持续"] = df["minute"].shift(-1).fillna(df["minute"].iloc[-1]) - df["minute"]
# 3. 汇总各状态总时长
summary = df.groupby("领先方")["持续"].sum()
print(summary)
# 4. 谁最终角球领先
final = corner_leader(df["home_corners"].iloc[-1], df["away_corners"].iloc[-1])
print("全场结束角球领先方:", final)
输出示例:
领先方
主队领先 40
持平 20
客队领先 30
全场结束角球领先方: 主队领先
进阶:从事件流自动判断"首次领先/反超"
如果数据是逐个角球事件(而非每分钟快照),用这个版本更准:
import pandas as pd
# 事件流:每个角球一条记录
events = pd.DataFrame({
"minute": [5, 12, 18, 25, 33, 47, 58, 66, 78, 85],
"team": ["客", "主", "主", "客", "主", "主", "客", "主", "主", "客"],
})
home = away = 0
records = []
for _, e in events.iterrows():
if e["team"] == "主":
home += 1
else:
away += 1
records.append({
"minute": e["minute"],
"home": home,
"away": away,
"领先方": corner_leader(home, away),
})
df = pd.DataFrame(records)
# 找出领先方发生变化的时刻(含首次领先/反超)
df["变化"] = df["领先方"] != df["领先方"].shift(1)
changes = df[df["变化"]]
print(changes[["minute", "home", "away", "领先方"]])
这样能直接输出:第几分钟谁首次角球领先、第几分钟被反超,非常适合做赛事播报或复盘。
按你的实际需求选
| 场景 | 推荐 |
|---|---|
| 直播手动记录 | Excel 公式版 |
| 批量处理历史数据 | Python 快照版 |
| 要"反超时间点"分析 | Python 事件流版 |
| 接入 API 实时推送 | Python + 定时调用 corner_leader |
如果你能告诉我数据来源格式(API JSON、CSV 字段、还是手动 Excel),我可以把脚本改成完全贴合你数据的版本,直接复制就能跑。