Pandas使用apply或map结合字典校正赛事数据生成新列问题求助
问题根因
你当前的错误出在apply的调用逻辑上:
- 你是对
df['event_distance']这个单列Series调用apply,遍历时只会把每一行的event_distance数值传入自定义函数,函数内尝试读取参数的home_team属性自然不存在,触发报错。
修复方案
方案1:最小改动适配现有代码
仅修改最后一行apply的调用规则,改为对整个DataFrame按行遍历,每次传入整行数据到自定义函数即可:
# 构建校正字典、自定义函数的代码保持不变,仅修改最后一行 df['adj_dist'] = df.apply(make_adjustment, axis=1)
方案2:更高效的向量化实现(推荐)
不需要自定义函数和逐行遍历,直接用map方法把主队名称映射为校正值,做列级运算即可,大数据量下性能远高于逐行apply:
# 构建校正字典的代码不变,后续代码替换为以下内容 df['adj_dist'] = df['event_distance'] - df['home_team'].map(adj_shot_dict)
该方案利用Pandas原生向量化运算特性,避免了逐行遍历的额外开销,数据量越大性能优势越明显。
内容的提问来源于stack exchange,提问作者jon
相关产品推荐
相关产品推荐

