我有两个数据帧
df
df2
df
列FOUR
与df2
列LOOKUP COL
匹配
我需要将df
列FOUR
与df2
列LOOKUP COL
匹配,并将df
列FOUR
替换为{{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
答案 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']
值数组。