You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas计算NFL四分卫(QB)平均体重结果异常偏高问题排查

排查NFL四分卫(QB)平均体重异常偏高的问题

以下是从数据处理全流程入手的排查步骤及对应代码,帮你定位问题根源:

1. 检查数据合并逻辑是否出错

合并时的关联键(如球员ID、姓名+选秀年份)不唯一或匹配错误,是导致数据重复、错位的常见原因。

# 输出合并前后的行数变化,判断是否有异常膨胀
print(f"脑震荡数据行数: {len(concussion_data)}")
print(f"Combine数据行数: {len(combine_data)}")
merged_data = pd.merge(concussion_data, combine_data, on='player_id', how='inner')
print(f"合并后数据行数: {len(merged_data)}")

# 检查QB分组的重复记录
qb_data = merged_data[merged_data['position'] == 'QB']
print(f"QB数据总行数: {len(qb_data)}")
print(f"唯一QB球员数量: {qb_data['player_id'].nunique()}")

如果QB总行数远大于唯一球员数,说明存在重复合并,可通过drop_duplicates()去重,或增加更精准的合并键(如on=['player_id', 'draft_year'])。

2. 排查QB体重数据的异常值

正常QB体重普遍在210-250磅区间,先检查是否存在离谱的异常值:

# 输出QB体重的描述统计
print(qb_data['weight'].describe())

# 绘制箱线图可视化异常值
import seaborn as sns
import matplotlib.pyplot as plt
sns.boxplot(x=qb_data['weight'])
plt.title('QB体重分布箱线图')
plt.show()

# 筛选体重超过300磅的可疑记录
outliers = qb_data[qb_data['weight'] > 300]
print(outliers[['player_name', 'weight', 'position']])

若存在异常值,需确认这些记录的位置标注是否正确,或是否为体重输入错误,直接清洗掉此类数据即可。

3. 验证位置分组的准确性

确认合并后的数据中,QB位置的标注未被错误覆盖或混淆:

# 查看所有位置的分布情况
print(merged_data['position'].value_counts())

# 随机抽查QB记录的核心信息
print(qb_data.sample(10)[['player_name', 'position', 'weight', 'height']])

如果发现其他位置球员混入QB分组,说明数据源的位置字段存在错误,或合并时未处理同名字段(如两个数据集都有position,需指定后缀区分:suffixes=('_concussion', '_combine'))。

4. 隔离验证Combine数据源的QB均值

单独计算Combine数据中的QB体重均值,排除脑震荡数据的干扰:

# 单独统计Combine数据的QB平均体重
combine_qb_mean = combine_data[combine_data['position'] == 'QB']['weight'].mean()
print(f"Combine原始数据QB平均体重: {combine_qb_mean:.1f}磅")

# 对比合并后的QB平均体重
merged_qb_mean = merged_data[merged_data['position'] == 'QB']['weight'].mean()
print(f"合并后QB平均体重: {merged_qb_mean:.1f}磅")

若两者差异极大,说明合并过程引入错误;若均值一致,则问题出在Combine数据源本身(如混入其他位置球员)。

修正代码示例(以重复合并问题为例)

# 先对两个数据集按球员ID去重
concussion_data_clean = concussion_data.drop_duplicates(subset='player_id', keep='first')
combine_data_clean = combine_data.drop_duplicates(subset='player_id', keep='first')

# 精准合并数据
merged_data_clean = pd.merge(concussion_data_clean, combine_data_clean, on='player_id', how='inner')

# 重新计算各位置的身高体重均值
position_means = merged_data_clean.groupby('position').agg({'height': 'mean', 'weight': 'mean'}).round(1)
print(position_means)

# 绘制对比图表
position_means.plot(kind='bar', figsize=(10, 6))
plt.title('NFL各位置球员身高体重均值对比')
plt.ylabel('数值')
plt.xlabel('位置')
plt.show()

内容的提问来源于stack exchange,提问作者Glaikit7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 11:36:00