Python Pandas查找并替换df2中的df1值

时间:2017-05-01 07:59:08

标签: python pandas

我有两个数据帧

df df2

dfFOURdf2LOOKUP COL匹配

我需要将dfFOURdf2LOOKUP COL匹配,并将dfFOUR替换为{{df2列中的相应值1}}列RETURN THIS

生成的数据框可能会覆盖df,但我将其列为result

注意:索引与每个数据框都不匹配

df = pd.DataFrame([['a', 'b', 'c', 'd'], 
              ['e', 'f', 'g', 'h'],
              ['j', 'k', 'l', 'm'],
              ['x', 'y', 'z', 'w']])

df.columns = ['ONE', 'TWO', 'THREE', 'FOUR']

      ONE  TWO THREE FOUR
   0    a   b   c   d
   1    e   f   g   h
   2    j   k   l   m
   3    x   y   z   w 

df2 = pd.DataFrame([['a', 'b', 'd', '1'], 
              ['e', 'f', 'h', '2'],
              ['j', 'k', 'm', '3'],
              ['x', 'y', 'w', '4']])

df2.columns = ['X1', 'Y2', 'LOOKUP COL', 'RETURN THIS']

    X1  Y2  LOOKUP COL  RETURN THIS
 0  a   b      d              1
 1  e   f      h              2
 2  j   k      m              3
 3  x   y      w              4

结果DF

   ONE  TWO THREE  FOUR
0   a   b     c     1
1   e   f     g     2
2   j   k     l     3
3   x   y     z     4

2 个答案:

答案 0 :(得分:3)

您可以使用Series.map。您需要创建要在地图中使用的字典或系列。系列更有意义,但索引应为LOOKUP COL

df['FOUR'] = df['FOUR'].map(df2.set_index('LOOKUP COL')['RETURN THIS'])

df
Out: 
  ONE TWO THREE FOUR
0   a   b     c    1
1   e   f     g    2
2   j   k     l    3
3   x   y     z    4

答案 1 :(得分:0)

df['Four']=[df2[df2['LOOKUP COL']==i]['RETURN THIS'] for i in df['Four']]

应该足以做到这一点吗?这可能是更多熊猫原生的方式。

基本上,列表理解 - 当我们遍历df2['RETURN THIS']列表时,我们基于使用查阅列生成一个新的i in df['Four']值数组。