首页 > 解决方案 > 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        selected  ranking
0             Keno        2868.755        1
1      Filipe Luís         776.147        3
2  Thiago Galhardo        2696.853        2

和这个:

df_player = pd.DataFrame({'name':['Keno', 'Filipe Luís', 'Thiago Galhardo', 'SomePlayer'],
                    'team': ['Atlético-MG', 'Flamengo', 'Internacional', 'SomeTeam']})

打印:

            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_selected,则在其排名中添加 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

我错过了什么?

标签: pandas

解决方案


这是我的做法。

merge_dict = dict(zip(df_selected['player'], df_selected['ranking']))
df_player['ranking'] = df_player['player'].map(merge_dict)

我认为这可以解决您的问题,并且会比您的 for 循环快得多。


推荐阅读