Pandas处理NBA总决赛MVP数据时Team MVPS列全为1的问题排查
NBA总决赛MVP数据处理问题排查与修正
问题原因
你的代码存在核心逻辑错误:每次循环执行df['Team MVPS'] = t_count时,是把整个列的所有行都设置为当前球队的MVP人数。循环结束后,整列只会保留最后一次循环的t_count值——如果最后遍历的球队恰好只有1位MVP,那整列就全变成1了。
本质是你没有针对每个球队对应的行单独赋值,而是每次都全局覆盖了整列数据。
修正方案
方案一:用Pandas分组+transform(推荐,更高效)
这是Pandas原生的向量化操作,比循环更简洁高效:
import pandas as pd df = pd.read_csv("NBA Finals MVP 2000.csv") # 按球队分组,统计每组内不同MVP的人数,再映射回原数据的对应行 df['Team MVPS'] = df.groupby('Team')['Finals MVP'].transform(lambda x: x.nunique()) df.head(24)
方案二:修复原循环逻辑
如果想保留循环写法,需要修改赋值逻辑,只给当前球队的行赋值:
import pandas as pd import numpy as np df = pd.read_csv("NBA Finals MVP 2000.csv") teams = df['Team'].unique() # 先初始化列,避免空值 df['Team MVPS'] = 0 for t in teams: td = df[df['Team'] == t] # 直接用nunique()统计不同MVP的人数,无需手动循环计数 t_count = td['Finals MVP'].nunique() # 仅给当前球队对应的行赋值,而非整列 df.loc[df['Team'] == t, 'Team MVPS'] = t_count df.head(24)
内容的提问来源于stack exchange,提问作者Ramon Araneta
相关产品推荐
相关产品推荐

