大学橄榄球星级球员统计:填充球队数据集星级人数字段
高效解决方案:基于Pandas的星级球员统计与数据集合并
核心思路
先对招募数据集按team+year分组聚合,统计各队每年的星级球员数量,再通过左连接将统计结果映射到球队数据集,确保原有球队数据的完整性。
步骤1:预处理与分组统计(针对招募数据集)
首先筛选2013-2020年的数据,然后按球队和年份分组,分别计算4_5Stars(4星+5星)和2_3Star players(2星+3星)的数量:
import pandas as pd import numpy as np # 加载数据集 recruit_df = pd.read_csv("招募数据集路径.csv") team_df = pd.read_csv("球队数据集路径.csv") # 1. 筛选目标年份数据 recruit_filtered = recruit_df[(recruit_df['year'] >= 2013) & (recruit_df['year'] <= 2020)] # 2. 统一键字段格式(解决合并返回0行的核心问题) # 消除team字段的大小写/空格差异 recruit_filtered['team'] = recruit_filtered['team'].str.strip().str.lower() team_df['team'] = team_df['team'].str.strip().str.lower() # 确保year字段类型一致(统一为整数) recruit_filtered['year'] = recruit_filtered['year'].astype(int) team_df['year'] = team_df['year'].astype(int) # 3. 分组统计星级球员数量 star_stats = recruit_filtered.groupby(['team', 'year']).agg( 4_5Stars=('stars', lambda x: np.sum((x == 4) | (x == 5))), 2_3Star players=('stars', lambda x: np.sum((x == 2) | (x == 3))) ).reset_index()
步骤2:合并到球队数据集
使用左连接(how='left')确保球队数据集中的所有行都被保留,空字段自动填充统计结果:
# 合并数据集,以team和year为连接键 final_team_df = pd.merge( team_df, star_stats, on=['team', 'year'], how='left' ) # 处理无招募数据的情况(空值填充为0) final_team_df['4_5Stars'] = final_team_df['4_5Stars'].fillna(0).astype(int) final_team_df['2_3Star players'] = final_team_df['2_3Star players'].fillna(0).astype(int)
关键问题排查(针对合并返回0行的情况)
- 字段格式不匹配:检查
team是否存在大小写、空格差异,year是否有字符串/数字类型不一致的情况(比如招募数据是"2019"字符串,球队数据是2019整数) - 年份范围不匹配:确认球队数据集的年份是否在2013-2020范围内,超出范围的年份合并后对应字段会为空
- 分组键错误:必须同时用
team和year作为分组/连接键,同一球队不同年份的招募数据是独立统计单元
后续分析兼容性
处理后的final_team_df直接支持后续的统计分析、线性回归(如statsmodels/sklearn)和可视化(如matplotlib/seaborn),所有字段均为结构化数值类型,键字段统一无冲突。
内容的提问来源于stack exchange,提问作者sjohnp2112
相关产品推荐
相关产品推荐

