[英]Python Pandas lookup and replace df1 value from df2
我有两个数据框
df
df2
df
列FOUR
与df2
列LOOKUP COL
相匹配
我需要将df
列FOUR
与df2
列LOOKUP COL
匹配,并将df
列FOUR
替换为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.