如何用Python为2022世界杯数据集计算球队赛前不败场次
解决方案:按球队统计赛前连续不败场次
核心逻辑
- 先按球队分组,再对每组内的比赛按日期升序排序(确保比赛时间线正确,避免原数据日期乱序导致统计错误)
- 对每个球队的比赛序列维护一个连续不败计数器:
- 初始计数器设为0
- 每场比赛的「期望输出」取当前计数器值
- 若本场结果为「胜」或「平」,计数器加1
- 若本场结果为「负」,计数器重置为0,且「期望输出」留空
代码实现(Python + Pandas)
假设你的数据集存储在DataFrame df 中,执行以下代码:
import pandas as pd # 1. 转换日期格式并按球队+日期排序,修正原数据的日期乱序问题 df['日期'] = pd.to_datetime(df['日期']) df = df.sort_values(by=['球队', '日期'], ascending=[True, True]).reset_index(drop=True) # 2. 定义函数计算单支球队的连续不败场次 def calculate_unbeaten_streak(group): streak = 0 result_list = [] for res in group['比赛结果']: if res == '负': result_list.append('') streak = 0 else: result_list.append(streak) streak += 1 group['期望输出'] = result_list return group # 3. 按球队分组应用统计逻辑 df = df.groupby('球队').apply(calculate_unbeaten_streak).reset_index(drop=True) # 输出结果 print(df)
验证结果
运行后会得到符合预期的输出(原示例中UK的日期乱序会被自动修正):
| 日期 | 球队 | 比赛结果 | 期望输出 |
|---|---|---|---|
| 2021-06-27 | NL | 负 | |
| 2021-09-01 | NL | 胜 | 0 |
| 2021-09-04 | NL | 胜 | 1 |
| 2021-09-08 | NL | 胜 | 2 |
| 2021-09-15 | NL | 平 | 3 |
| 2021-09-18 | NL | 负 | 4 |
| 2021-10-01 | NL | 胜 | 0 |
| 2021-10-05 | NL | 胜 | 1 |
| 2021-06-27 | UK | 负 | |
| 2021-08-27 | UK | 负 | 2 |
| 2021-08-31 | UK | 胜 | 0 |
| 2021-09-04 | UK | 平 | 1 |
| 2021-09-01 | NL | 胜 | 0 |
内容的提问来源于stack exchange,提问作者brenda89
相关产品推荐
相关产品推荐

