这是我遇到的问题。
我想用dfTeam
中包含的团队名称来映射团队代码(包含在主df中)。
以下是主要df的示例:
Game Code Play Number Period Number Clock Offense Team Code
0 690002820050901 1 1 900.0 690
1 690002820050901 2 1 NaN 28
2 690002820050901 3 1 NaN 28
3 690002820050901 4 1 NaN 28
4 690002820050901 5 1 NaN 28
5 690002820050901 6 1 NaN 28
6 690002820050901 7 1 826.0 690
7 690002820050901 8 1 NaN 690
8 690002820050901 9 1 NaN 690
我想使用名为Offense Team Code
的此数据框使用团队名称来更改诸如dfTeam
之类的列。
Team Code Name Conference Code
0 5 Akron 875
1 8 Alabama 911
2 9 UAB 24312
3 28 Arizona State 905
4 29 Arizona 905
这是我目前正在做的工作,以合并数据框,更改列名并删除不需要的列:
teamDict = {'Home Team Code':'homeTeamName','Visit Team Code':'visitTeamName','Offense Team Code':'offenseTeamName','Defense Team Code':'defenseTeamName'}
for oldName,newName in teamDict.items():
dfFULL = pd.merge(dfFULL,dfTeam,how='left',left_on=oldName,right_on='Team Code')
dfFULL.rename(columns={'Name':newName},inplace=True)
dfFULL.drop(['Conference Code','Team Code',oldName],axis=1,inplace=True)
此代码有效,但速度很慢。我的主数据帧有130k左右的行。有更有效的方法吗?
答案 0 :(得分:2)
您基本上想将dfTeam
用作将Team Codes
映射到Names
的字典。对于每一列,您只需执行映射即可。
d = dfTeam.set_index('Team Code').Name
for oldName,newName in teamDict.items():
dfFULL[newName] = dfFULL[oldName].map(d)
# Then get rid of all old names
dfFull = dfFull.drop(columns=list(teamDict.keys()))