如何筛选同一赛季同时征战常规赛与季后赛的NBA球员数据?
问题根源
你之前只按PLAYER_ID合并,会把同一球员所有赛季的常规赛数据和所有赛季的季后赛数据做笛卡尔积匹配——比如某球员有3个常规赛赛季、2个季后赛赛季,就会生成6条记录,其中只有对应同一赛季的2条是有效数据,剩下4条都是跨赛季的无效重复行。
解决方案
核心是**同时按「赛季(Year)+球员ID(PLAYER_ID)」**进行合并,确保只匹配同一赛季同一球员的常规赛和季后赛数据。
基础版(假设单赛季单球员仅一条数据)
直接修改合并逻辑,将合并键从单一的PLAYER_ID改为['Year', 'PLAYER_ID']:
# 按赛季+球员ID精准匹配同一赛季的常规赛/季后赛数据 merged_df = pd.merge(rs_df, po_df, on=['Year', 'PLAYER_ID'], suffixes=('_RS', '_PO')) merged_df.dropna(inplace=True) merged_df.reset_index(drop=True, inplace=True)
进阶版(处理单赛季单球员多条数据的情况)
如果存在球员单赛季中途转会,同一赛季同一球员有多条记录(代表不同球队),建议先对常规赛和季后赛数据按「赛季+球员ID」聚合,再合并:
# 对常规赛数据按赛季+球员ID聚合(这里用均值计算场均,需要总和就把mean改成sum) rs_agg = rs_df.groupby(['Year', 'PLAYER_ID', 'PLAYER']).mean(numeric_only=True).reset_index() # 对季后赛数据做同样聚合 po_agg = po_df.groupby(['Year', 'PLAYER_ID', 'PLAYER']).mean(numeric_only=True).reset_index() # 合并聚合后的数据集 merged_df = pd.merge(rs_agg, po_agg, on=['Year', 'PLAYER_ID', 'PLAYER'], suffixes=('_RS', '_PO')) merged_df.dropna(inplace=True) merged_df.reset_index(drop=True, inplace=True)
验证结果
合并后你可以查看merged_df的赛季字段(基础版中Year会作为共同列,无需区分后缀),确认都是同一赛季的数据,同时检查球员是否符合「该赛季同时参加常规赛和季后赛」的要求——比如卢卡·东契奇2022-2023赛季的常规赛数据会被自动排除,因为找不到对应赛季的季后赛数据。
内容的提问来源于stack exchange,提问作者MinChocoCake_01
相关产品推荐
相关产品推荐

