如何为DataFrame添加球队逐场战绩列?是否需先groupby赛季?
解决球队逐场战绩累计的问题
嘿,这个需求其实挺典型的,咱们一步步来搞定它~
核心思路:必须按「球队+赛季」分组
你的赛季数据里既有常规赛(比如2015-16)又有季后赛(比如2015 Post),这两个是完全独立的赛事周期,球队的季后赛战绩不会和常规赛累计到一起,所以一定要把team和season作为分组的双重键,不能只按球队分组哦。
具体实现步骤
假设你的DataFrame有这些关键列:team(球队名称)、season(赛季)、game_date(比赛日期)、result(比赛结果,比如W代表赢,L代表输)。
1. 先按正确顺序排序
战绩是逐场累计的,必须保证同球队同赛季的比赛是按时间先后排列的,不然累计结果会出错:
# 按球队、赛季、比赛日期排序 df = df.sort_values(by=['team', 'season', 'game_date'])
2. 计算累计胜场和负场
先把胜负结果转成数值,再通过分组累计得到逐场的胜场、负场数,最后拼接成战绩字符串:
# 把胜负转成数值:赢=1,输=0 df['win_flag'] = df['result'].map({'W': 1, 'L': 0}) # 分组计算累计胜场 df['cum_wins'] = df.groupby(['team', 'season'])['win_flag'].cumsum() # 累计负场 = 已赛场次 - 累计胜场(cumcount()+1是因为从第1场开始计数) df['cum_losses'] = df.groupby(['team', 'season']).cumcount() + 1 - df['cum_wins'] # 生成「X胜Y负」的战绩列 df['game_by_game_record'] = df['cum_wins'].astype(str) + '-' + df['cum_losses'].astype(str)
3. 特殊情况适配
如果你的比赛结果不是W/L,而是用得分差(比如team_score - opp_score,正数为赢,负数为输),可以调整win_flag的生成逻辑:
# 用得分差判断胜负,转成0/1的标识 df['win_flag'] = (df['point_difference'] > 0).astype(int)
验证结果
你可以抽某支球队的某个赛季数据看看是否正确:
# 比如查看湖人2015-16赛季的逐场战绩 print(df[(df['team'] == 'Los Angeles Lakers') & (df['season'] == '2015-16')][['game_date', 'result', 'game_by_game_record']])
这样就能得到每支球队在每个赛季里,从第一场到最后一场的实时战绩啦~
内容的提问来源于stack exchange,提问作者stretchy
相关产品推荐
相关产品推荐

