如何基于FTR列生成热刺赛事积分列:匹配特定值并设其余为0
问题分析与解决方案
你的代码出错核心在于判断列用错了:你本该基于FTR(终场结果)列做判断,却误用到了要生成的Points列——这列在运行代码前要么不存在,要么没有对应数据,导致所有条件都不成立,最终全部走default逻辑,所以所有值都变成0。
另外np.select的choices长度要和conditions严格对应,你有2个条件,choices只需要2个值,剩下的情况交给default处理即可。
正确写法(用np.select)
import numpy as np # 基于FTR列设置判断条件 conditions = [ Tottenham['FTR'] == 'Tottenham', Tottenham['FTR'] == 'Draw' ] # 对应条件的积分值(如果需要字符串类型就改成'3','1') choices = [3, 1] # 其他所有情况(输球)直接设为0 Tottenham['Points'] = np.select(conditions, choices, default=0)
更简洁的写法(用字典映射)
如果你觉得np.select有点繁琐,用map+fillna更直观:
# 建立结果与积分的映射关系 points_mapping = { 'Tottenham': 3, 'Draw': 1 } # 映射FTR列的值,找不到的结果(输球)填充为0 Tottenham['Points'] = Tottenham['FTR'].map(points_mapping).fillna(0)
这样就能准确生成热刺每场比赛的积分:赢球得3分,平局得1分,输球得0分。
内容的提问来源于stack exchange,提问作者Will Hitchler
相关产品推荐
相关产品推荐

