繁体   English   中英

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

[英]Python Pandas lookup and replace df1 value from df2

我有两个数据框

df df2

dfFOURdf2LOOKUP COL相匹配

我需要将dfFOURdf2LOOKUP COL匹配,并将dfFOUR替换为df2列中的对应值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

您可以使用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
df['Four']=[df2[df2['LOOKUP COL']==i]['RETURN THIS'] for i in df['Four']]

应该足以完成这项工作吗? 可能还有更多的熊猫原生方式可以做到这一点。

基本上,列表理解-我们在迭代i in df['Four']列表中的i in df['Four']使用查找列生成一个新的df2['RETURN THIS']值数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM