将列的值与另一个数据框列匹配并替换值

时间:2021-07-29 21:54:53

标签: python

我有两个数据框。 (这些都是简单的例子,我的真实数据有近 3,000 行)

>df
 player position nation Mins
 Messi    FW      ARG   3302
 Ronaldo  FW      POR   3029
 Van Dijk DF      NED   500
 Mane     FW      SEN   3088
 Alena    MF      SPA   1592


>df2
 player position
 Alena    CM    
 Ronaldo  ST    
 Mane     LW    
 Van Dijk CB    
 Messi    ST   

我想要做的是用 df.matching df2 列中的位置数据替换 player 中的位置数据。

我已尝试对两个列的 player 列的值进行排序,然后仅使用 df['pos2']=df2['position']

创建一个新的位置列

但它最终在结果列的某些区域略有错误。 这就是为什么我希望根据匹配列来做这件事。

1 个答案:

答案 0 :(得分:1)

根据 player 列合并您的数据框:

>>> df1.drop(columns='position').merge(df2, on='player')

     player nation  Mins position
0     Messi    ARG  3302       ST
1   Ronaldo    POR  3029       ST
2  Van Dijk    NED   500       CB
3      Mane    SEN  3088       LW
4     Alena    SPA  1592       CM

也许您想保留历史记录:

>>> df1.merge(df2, on='player', suffixes=('_old', '_new'))

     player position_old nation  Mins position_new
0     Messi           FW    ARG  3302           ST
1   Ronaldo           FW    POR  3029           ST
2  Van Dijk           DF    NED   500           CB
3      Mane           FW    SEN  3088           LW
4     Alena           MF    SPA  1592           CM