如何基于其他数据框列替换熊猫列值

时间:2020-07-01 13:16:15

标签: python-3.x pandas

我有2个如下的pandas数据框

df1:-

 col1   col2 col3 
   aa      b   c
   aa      d   c
   bb      d   t
   bb      b   g
   cc      e   c
   dd      g   c

和第二个数据帧:-

 col1  col2 
  aa    b
  cc    e
  bb    d

我想将dataframe1的col3值更改为“ cc”。像下面一样。基于第二个数据框列col1和col2。

 col1   col2 col3 
   aa      b   cc
   aa      d   c
   bb      d   cc
   bb      b   g
   cc      e   cc
   dd      g   c

简而言之,我想将第2个数据帧的列(col1,col2)与第1个数据帧的列(col1,col2)映射,并在匹配的第1个数据帧的列(col3)处进行映射。

2 个答案:

答案 0 :(得分:1)

DataFrame.merge与左连接和指标参数一起用于帮助程序列,将==的{​​{3}}与bothSeries.eq中的最后设置值进行比较:< / p>

m = df1.merge(df2, on=['col1','col2'],indicator=True, how='left')['_merge'].eq('both')

df1.loc[m, 'col3'] = 'cc'
print (df1)
  col1 col2 col3
0   aa    b   cc
1   aa    d    c
2   bb    d   cc
3   bb    b    g
4   cc    e   cc
5   dd    g    c

答案 1 :(得分:0)

您可以在数据帧df2上,在pd.concat之后使用drop_duplicatesassign来表示'col3'的值:

df = pd.concat([df2.assign(col3='cc'), df1]).drop_duplicates(['col1','col2']).reset_index(drop=True)
df

输出:

  col1 col2 col3
0   aa    b   cc
1   cc    e   cc
2   bb    d   cc
3   aa    d    c
4   bb    b    g
5   dd    g    c