掌柜最近在做王者荣耀2022KPL春季赛的赛事数据分析,下表kpl是从官方数据平台获取到的2022KPL春季赛常规赛近500场的赛事数据:
这里大家可以很明显的看到team_bh和team_ph两列下面都是一堆数字,其实它们分别代表的是王者荣耀里面的各个英雄。下表code就是掌柜整理的2022KPL春季赛常规赛登场的所有英雄和对应的数字编码:
import pandas as pd
ban_name = ['ban' + str(x+1) for x in range(4)] #新生成的列名(禁用英雄四位)
ban = kpl['team_bh'].str.split('|', expand=True) #按竖线|进行拆分
ban.columns = ban_name
kpl = kpl.join(ban) #合并两表
kpl
拆分后的效果图:
可以看到最后四列就是拆分后的每队禁用英雄,这里取名为ban加上数字1-4,表示禁用英雄的顺序,ban1就是最先禁用的英雄。同理可以对team_ph列进行如上操作,然后删除team_bh和team_ph两列,得到拆分后的新kpl表:
这样就解决了第一个问题,下面来看第二个问题的具体方法:
hero_code = code.set_index(['code'])['hero'].to_dict()
kpl['ban1'] = kpl['ban1'].map(hero_code)
替换后新的kpl表:
首先掌柜对code表进行了一个转换,将里面的数字编码和对应英雄转换为字典格式,这样方便后面进行批量的多值替换。
接着掌柜用map()函数进行一个映射操作(也就是每一列的数字都根据字典中的key进行一个匹配,如果适配,就替换为对应的英雄名字);当然这里也可以使用replace()函数或apply()函数来替换,但是速度没有map()函数的快。
现在这张经过处理后的kpl赛事数据表就干净很多了,我们可以一眼就看出来每个战队禁用英雄的顺序(公孙离和鲁班大师几乎都在第一ban位)和选用英雄的优先级(夏侯惇和澜一选的概率较大),后面将会根据各个战队进行一系列的数据分析和挖掘工作,敬请期待!
PS:完整的代码会在整个项目做完后放上Github,谢谢耐心等待和理解。
参考资料:
按照字典dict替换Pandas DataFrame的值:三种方法性能比较