Pandas-将值从一个数据帧映射到另一个数据帧

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:

 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