Pandas-将值从一个数据帧映射到另一个数据帧
我有这个df:Pandas-将值从一个数据帧映射到另一个数据帧,pandas,Pandas,我有这个df: df_selected = pd.DataFrame({'player':['Keno', 'Filipe Luís', 'Thiago Galhardo'], 'selected': [2868.755, 776.147, 2696.853], 'ranking':[1,3,2]}) 其中打印: player select
df_selected = pd.DataFrame({'player':['Keno', 'Filipe Luís', 'Thiago Galhardo'],
'selected': [2868.755, 776.147, 2696.853],
'ranking':[1,3,2]})
其中打印:
player selected ranking
0 Keno 2868.755 1
1 Filipe Luís 776.147 3
2 Thiago Galhardo 2696.853 2
player team
0 Keno Atlético-MG
1 Filipe Luís Flamengo
2 Thiago Galhardo Internacional
3 Fulano TimeQualquer
还有这个:
df_player = pd.DataFrame({'name':['Keno', 'Filipe Luís', 'Thiago Galhardo', 'SomePlayer'],
'team': ['Atlético-MG', 'Flamengo', 'Internacional', 'SomeTeam']})
其中打印:
player selected ranking
0 Keno 2868.755 1
1 Filipe Luís 776.147 3
2 Thiago Galhardo 2696.853 2
player team
0 Keno Atlético-MG
1 Filipe Luís Flamengo
2 Thiago Galhardo Internacional
3 Fulano TimeQualquer
现在我想检查df_player
中的给定玩家是否在df_selected
中,如果是,获取其排名位置并将其添加到df_player
中的新列中。如果玩家不在所选的df_
,则为其排名添加0值。我试过:
for ind, player in df_player.iterrows():
for index, selected in df_selected.iterrows():
if player.player == selected.player:
df_player['ranking'].iloc[ind] = selected.ranking
else:
df_player['ranking'].iloc[ind] = 0
但它不起作用,必须有一种更简单的方法来映射这些项目
player_df的期望结果
:
player team ranking
0 Keno Atlético-MG 1
1 Filipe Luís Flamengo 3
2 Thiago Galhardo Internacional 2
3 SomePlayer SomeTeam 0
我错过了什么?以下是我的做法
merge_dict = dict(zip(df_selected['player'], df_selected['ranking']))
df_player['ranking'] = df_player['player'].map(merge_dict)
我认为这解决了您的问题,并且将比for循环快得多。以下是我的做法
merge_dict = dict(zip(df_selected['player'], df_selected['ranking']))
df_player['ranking'] = df_player['player'].map(merge_dict)
我认为这解决了您的问题,并且比for循环快得多。创建
播放器字典;使用dict(zip())
和将映射到df\u播放器['name']
df_player['ranking']=df_player['name'].map(dict(zip(df_selected.player,df_selected.ranking))).fillna(0).astype(int)
print(df_player)
name team ranking
0 Keno Atlético-MG 1
1 Filipe Luís Flamengo 3
2 Thiago Galhardo Internacional 2
3 SomePlayer SomeTeam 0
创建播放器的字典;使用dict(zip())
和将映射到df\u播放器['name']
df_player['ranking']=df_player['name'].map(dict(zip(df_selected.player,df_selected.ranking))).fillna(0).astype(int)
print(df_player)
name team ranking
0 Keno Atlético-MG 1
1 Filipe Luís Flamengo 3
2 Thiago Galhardo Internacional 2
3 SomePlayer SomeTeam 0